{"file_path":"Crowdsale.sol","creation_status":"success","source_code":"pragma solidity ^0.4.21;\r\n\r\n/**\r\n * @title ERC20Basic\r\n * @dev Simpler version of ERC20 interface\r\n * @dev see https://github.com/ethereum/EIPs/issues/179\r\n */\r\ncontract ERC20Basic {\r\n  function totalSupply() public view returns (uint256);\r\n  function balanceOf(address who) public view returns (uint256);\r\n  function transfer(address to, uint256 value) public returns (bool);\r\n  event Transfer(address indexed from, address indexed to, uint256 value);\r\n}\r\n\r\n/**\r\n * @title SafeMath\r\n * @dev Math operations with safety checks that throw on error\r\n */\r\nlibrary SafeMath {\r\n\r\n  /**\r\n   * @dev Multiplies two numbers, throws on overflow.\r\n   */\r\n  function mul(uint256 a, uint256 b) internal pure returns (uint256) {\r\n    if (a == 0) {\r\n      return 0;\r\n    }\r\n    uint256 c = a * b;\r\n    assert(c / a == b);\r\n    return c;\r\n  }\r\n\r\n  /**\r\n   * @dev Integer division of two numbers, truncating the quotient.\r\n   */\r\n  function div(uint256 a, uint256 b) internal pure returns (uint256) {\r\n    // assert(b > 0); // Solidity automatically throws when dividing by 0\r\n    uint256 c = a / b;\r\n    // assert(a == b * c + a % b); // There is no case in which this doesn't hold\r\n    return c;\r\n  }\r\n\r\n  /**\r\n   * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).\r\n   */\r\n  function sub(uint256 a, uint256 b) internal pure returns (uint256) {\r\n    assert(b <= a);\r\n    return a - b;\r\n  }\r\n\r\n  /**\r\n   * @dev Adds two numbers, throws on overflow.\r\n   */\r\n  function add(uint256 a, uint256 b) internal pure returns (uint256) {\r\n    uint256 c = a + b;\r\n    assert(c >= a);\r\n    return c;\r\n  }\r\n}\r\n\r\n\r\n/**\r\n * @title Crowdsale\r\n * @dev Crowdsale is a base contract for managing a token crowdsale,\r\n * allowing investors to purchase tokens with ether.\r\n * The external interface represents the basic interface for purchasing tokens, and conform\r\n * the base architecture for crowdsales. \r\n *\r\n * Presales:\r\n * Certain addresses are allowed to buy at a presale rate during the presale period. The\r\n * contribution of the investor needs to be of at least 5 ETH. A maximum of 15 million tokens\r\n * in total can be bought at the presale rate. Once the presale has been instructed to end, it\r\n * is not possible to enable it again.\r\n *\r\n * Sales:\r\n * Any address can purchase at the regular sale price. Sales can be pauses, resumed, and stopped.\r\n *\r\n * Minting:\r\n * The transferTokens function will mint the tokens in the Token contract. After the minting \r\n * is done, the Crowdsale is reset.\r\n * \r\n * Refunds:\r\n * A investor can be refunded by the owner. Calling the refund function resets the tokens bought\r\n * to zero for that investor. The Ether refund needs to be processed manually. It is important\r\n * to record how many tokens the investor had bought before calling refund().\r\n *\r\n*/\r\ncontract Crowdsale {\r\n  using SafeMath for uint256;\r\n\r\n  // The token being sold\r\n  StandardToken public token;\r\n\r\n  // How many token units a buyer gets per wei\r\n  uint256 public rate;\r\n\r\n  // How many token units a buyer gets per wei if entitled to the presale\r\n  uint public presaleRate;\r\n\r\n  // Amount of wei raised\r\n  uint256 public weiRaised;\r\n\r\n  // Administrator of the sale\r\n  address public owner;\r\n\r\n  // How many tokens each address bought at the normal rate\r\n  mapping (address => uint) public regularTokensSold;\r\n\r\n  // How many tokens each address bought at the presale rate\r\n  mapping (address => uint) public presaleTokensSold;\r\n\r\n  // List of all the investors\r\n  address[] public investors;\r\n\r\n  // Whether the sale is active\r\n  bool public inSale = true;\r\n\r\n  // Whether the presale is active\r\n  bool public inPresale = true;\r\n\r\n  // How many tokens each address can buy at the presale rate\r\n  mapping (address => uint) public presaleAllocations;\r\n\r\n  // The total number of tokens bought\r\n  uint256 public totalPresaleTokensSold = 0;\r\n\r\n  // The total number of tokens bought\r\n  uint256 public totalRegularTokensSold = 0;\r\n\r\n  // The maximum number of tokens which can be sold during presale\r\n  uint256 constant public PRESALETOKENMAXSALES = 15000000000000000000000000;\r\n\r\n  // The maximum number of tokens which can be sold during regular sale\r\n  uint256 public regularTokenMaxSales = 16000000000000000000000000;\r\n\r\n  // The minimum investment (5 ETH) during presale\r\n  uint256 constant public MINIMUMINVESTMENTPRESALE = 5000000000000000000;\r\n\r\n  // The minimum investment (5 ETH) during sale\r\n  uint256 constant public MINIMUMINVESTMENTSALE = 1000000000000000000;\r\n\r\n  modifier onlyOwner() {\r\n    require(msg.sender == owner);\r\n    _;\r\n  }\r\n\r\n  modifier onlyDuringPresale() {\r\n    require(inPresale);\r\n    _;\r\n  }\r\n\r\n  modifier onlyWhenSalesEnabled() {\r\n    require(inSale);\r\n    _;\r\n  }\r\n\r\n  /**\r\n   * Event for token purchase logging\r\n   * @param purchaser who paid for the tokens\r\n   * @param beneficiary who got the tokens\r\n   * @param value weis paid for purchase\r\n   * @param amount amount of tokens purchased\r\n   * @param rate the rate at which the tokens were purchased\r\n   */\r\n  event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount, uint256 rate);\r\n\r\n  /**\r\n   * Constructor for the crowdsale\r\n   * @param _owner owner of the contract, which can call privileged functions, and where every ether\r\n   *        is sent to\r\n   * @param _rate the rate for regular sales\r\n   * @param _rate the rate for presales\r\n   * @param _ownerInitialTokens the number of tokens the owner is allocated initially\r\n   */\r\n  function Crowdsale(\r\n    address _owner, \r\n    uint256 _rate, \r\n    uint256 _presaleRate, \r\n    uint256 _ownerInitialTokens\r\n  ) public payable {\r\n    require(_rate > 0);\r\n    require(_presaleRate > 0);\r\n    require(_owner != address(0));\r\n\r\n    rate = _rate;\r\n    presaleRate = _presaleRate;\r\n    owner = _owner;\r\n\r\n    investors.push(owner);\r\n    regularTokensSold[owner] = _ownerInitialTokens;\r\n  }\r\n\r\n  // -----------------------------------------\r\n  // Crowdsale external interface\r\n  // -----------------------------------------\r\n\r\n  function () external payable {\r\n    buyTokens();\r\n  }\r\n\r\n  /**\r\n   * Sets the address of the Token contract.\r\n   */\r\n  function setToken(StandardToken _token) public onlyOwner {\r\n    token = _token;\r\n  }\r\n\r\n  /**\r\n   * Buy a token at presale price. Converts ETH to as much QNT the sender can purchase. Any change\r\n   * is refunded to the sender. Minimum contribution is 5 ETH.\r\n   */\r\n  function buyPresaleTokens() onlyDuringPresale onlyWhenSalesEnabled public payable {\r\n    address _beneficiary = msg.sender;\r\n    uint256 weiAmount = msg.value;\r\n\r\n    _preValidatePurchase(_beneficiary);\r\n    require(weiAmount >= MINIMUMINVESTMENTPRESALE);\r\n\r\n    uint256 presaleAllocation = presaleAllocations[_beneficiary];\r\n\r\n    uint256 presaleTokens = _min256(weiAmount.mul(presaleRate), presaleAllocation);\r\n\r\n    _recordPresalePurchase(_beneficiary, presaleTokens);\r\n\r\n    // Remove presale tokens allocation\r\n    presaleAllocations[_beneficiary] = presaleAllocations[_beneficiary].sub(presaleTokens);\r\n\r\n    uint256 weiCharged = presaleTokens.div(presaleRate);\r\n\r\n    // Return any extra Wei to the sender\r\n    uint256 change = weiAmount.sub(weiCharged);\r\n    _beneficiary.transfer(change);\r\n\r\n    // Update total number of Wei raised\r\n    weiRaised = weiRaised.add(weiAmount.sub(change));\r\n\r\n    emit TokenPurchase(msg.sender, _beneficiary, weiCharged, presaleTokens, presaleRate);\r\n\r\n    // Forward the funds to owner\r\n    _forwardFunds(weiCharged);\r\n  }\r\n\r\n  /**\r\n   * Buy a token at sale price. Minimum contribution is 1 ETH.\r\n   */\r\n  function buyTokens() onlyWhenSalesEnabled public payable {\r\n    address _beneficiary = msg.sender;\r\n    uint256 weiAmount = msg.value;\r\n    _preValidatePurchase(_beneficiary);\r\n\r\n    require(weiAmount >= MINIMUMINVESTMENTSALE);\r\n\r\n    uint256 tokens = weiAmount.mul(rate);\r\n\r\n    // Check we haven't sold too many tokens\r\n    totalRegularTokensSold = totalRegularTokensSold.add(tokens);\r\n    require(totalRegularTokensSold <= regularTokenMaxSales);\r\n\r\n    // Update total number of Wei raised\r\n    weiRaised = weiRaised.add(weiAmount);\r\n\r\n    investors.push(_beneficiary);\r\n\r\n    // Give tokens\r\n    regularTokensSold[_beneficiary] = regularTokensSold[_beneficiary].add(tokens);\r\n\r\n    emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens, rate);\r\n\r\n    // Forward the funds to owner\r\n    _forwardFunds(weiAmount);\r\n  }\r\n\r\n  /**\r\n   * Records a purchase which has been completed before the instantiation of this contract.\r\n   * @param _beneficiary the investor\r\n   * @param _presaleTokens the number of tokens which the investor has bought\r\n   */\r\n  function recordPresalePurchase(address _beneficiary, uint256 _presaleTokens) public onlyOwner {\r\n    weiRaised = weiRaised.add(_presaleTokens.div(presaleRate));\r\n    return _recordPresalePurchase(_beneficiary, _presaleTokens);\r\n  }\r\n\r\n  function enableSale() onlyOwner public {\r\n    inSale = true;\r\n  }\r\n\r\n  function disableSale() onlyOwner public {\r\n    inSale = false;\r\n  }\r\n\r\n  function endPresale() onlyOwner public {\r\n    inPresale = false;\r\n\r\n    // Convert the unsold presale tokens to regular tokens\r\n    uint256 remainingPresaleTokens = PRESALETOKENMAXSALES.sub(totalPresaleTokensSold);\r\n    regularTokenMaxSales = regularTokenMaxSales.add(remainingPresaleTokens);\r\n  }\r\n\r\n  /**\r\n   * Mints the tokens in the Token contract.\r\n   */\r\n  function transferTokens() public onlyOwner {\r\n    for (uint256 i = 0; i < investors.length; i = i.add(1)) {\r\n      address investor = investors[i];\r\n\r\n      uint256 tokens = regularTokensSold[investor];\r\n      uint256 presaleTokens = presaleTokensSold[investor];\r\n      \r\n      regularTokensSold[investor] = 0;\r\n      presaleTokensSold[investor] = 0;\r\n\r\n      if (tokens > 0) {\r\n        _deliverTokens(token, investor, tokens);\r\n      }\r\n\r\n      if (presaleTokens > 0) {\r\n        _deliverTokens(token, investor, presaleTokens);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Mints the tokens in the Token contract. With Offset and Limit\r\n   */\r\n  function transferTokensWithOffsetAndLimit(uint256 offset, uint256 limit) public onlyOwner {\r\n    for (uint256 i = offset; i <  _min256(investors.length,offset+limit); i = i.add(1)) {\r\n      address investor = investors[i];\r\n\r\n      uint256 tokens = regularTokensSold[investor];\r\n      uint256 presaleTokens = presaleTokensSold[investor];\r\n\r\n      regularTokensSold[investor] = 0;\r\n      presaleTokensSold[investor] = 0;\r\n\r\n      if (tokens > 0) {\r\n        _deliverTokens(token, investor, tokens);\r\n      }\r\n\r\n      if (presaleTokens > 0) {\r\n        _deliverTokens(token, investor, presaleTokens);\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n   * Clears the number of tokens bought by an investor. The ETH refund needs to be processed\r\n   * manually.\r\n   */\r\n  function refund(address investor) onlyOwner public {\r\n    require(investor != owner);\r\n\r\n    uint256 regularTokens = regularTokensSold[investor];\r\n    totalRegularTokensSold = totalRegularTokensSold.sub(regularTokens);\r\n    weiRaised = weiRaised.sub(regularTokens.div(rate));\r\n\r\n    uint256 presaleTokens = presaleTokensSold[investor];\r\n    totalPresaleTokensSold = totalPresaleTokensSold.sub(presaleTokens);\r\n    weiRaised = weiRaised.sub(presaleTokens.div(presaleRate));\r\n\r\n    regularTokensSold[investor] = 0;\r\n    presaleTokensSold[investor] = 0;\r\n\r\n    // Manually send ether to the account\r\n  }\r\n\r\n  /**\r\n  * Accessor for Index\r\n  */\r\n  function getInvestorAtIndex(uint256 _index) public view returns(address) {\r\n    return investors[_index];\r\n  }\r\n\r\n  /**\r\n  * Return the length of the investors array\r\n  */\r\n  function getInvestorsLength() public view returns(uint256) {\r\n    return investors.length;\r\n  }\r\n\r\n  /**\r\n   * Get the number of tokens bought at the regular price for an address.\r\n   */\r\n  function getNumRegularTokensBought(address _address) public view returns(uint256) {\r\n    return regularTokensSold[_address];\r\n  }\r\n\r\n  /**\r\n   * Get the number of tokens bought at the presale price for an address.\r\n   */\r\n  function getNumPresaleTokensBought(address _address) public view returns(uint256) {\r\n    return presaleTokensSold[_address];\r\n  }\r\n\r\n  /**\r\n   * Get the number of tokens which an investor can purchase at presale rate.\r\n   */\r\n  function getPresaleAllocation(address investor) view public returns(uint256) {\r\n    return presaleAllocations[investor];\r\n  }\r\n\r\n  /**\r\n   * Set the number of tokens which an investor can purchase at presale rate.\r\n   */\r\n  function setPresaleAllocation(address investor, uint allocation) onlyOwner public {\r\n    presaleAllocations[investor] = allocation;\r\n  }\r\n\r\n  // -----------------------------------------\r\n  // Internal interface (extensible)\r\n  // -----------------------------------------\r\n\r\n  /**\r\n   * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations.\r\n   * @param _beneficiary Address performing the token purchase\r\n   */\r\n  function _preValidatePurchase(address _beneficiary) internal pure {\r\n    require(_beneficiary != address(0));\r\n  }\r\n\r\n  /**\r\n   * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens.\r\n   * @param _beneficiary Address performing the token purchase\r\n   * @param _tokenAmount Number of tokens to be emitted\r\n   */\r\n  function _deliverTokens(StandardToken _token, address _beneficiary, uint256 _tokenAmount) internal {\r\n    _token.mint(_beneficiary, _tokenAmount);\r\n  }\r\n\r\n  /**\r\n   * @dev Determines how ETH is stored/forwarded on purchases.\r\n   */\r\n  function _forwardFunds(uint256 amount) internal {\r\n    owner.transfer(amount);\r\n  }\r\n\r\n  function _min256(uint256 a, uint256 b) internal pure returns (uint256) {\r\n    return a < b ? a : b;\r\n  }\r\n\r\n  /**\r\n   * Records a presale purchase.\r\n   * @param _beneficiary the investor\r\n   * @param _presaleTokens the number of tokens which the investor has bought\r\n   */\r\n  function _recordPresalePurchase(address _beneficiary, uint256 _presaleTokens) internal {\r\n    // Check we haven't sold too many presale tokens\r\n    totalPresaleTokensSold = totalPresaleTokensSold.add(_presaleTokens);\r\n    require(totalPresaleTokensSold <= PRESALETOKENMAXSALES);\r\n\r\n    investors.push(_beneficiary);\r\n\r\n    // Give presale tokens\r\n    presaleTokensSold[_beneficiary] = presaleTokensSold[_beneficiary].add(_presaleTokens);\r\n  }\r\n}\r\n\r\n/**\r\n * @title Basic token\r\n * @dev Basic version of StandardToken, with no allowances.\r\n */\r\ncontract BasicToken is ERC20Basic {\r\n  using SafeMath for uint256;\r\n\r\n  mapping(address => uint256) balances;\r\n\r\n  uint256 totalSupply_ = 45467000000000000000000000;\r\n\r\n  /**\r\n  * @dev total number of tokens in existence\r\n  */\r\n  function totalSupply() public view returns (uint256) {\r\n    return totalSupply_;\r\n  }\r\n\r\n  /**\r\n  * @dev transfer token for a specified address\r\n  * @param _to The address to transfer to.\r\n  * @param _value The amount to be transferred.\r\n  */\r\n  function transfer(address _to, uint256 _value) public returns (bool) {\r\n    require(_to != address(0));\r\n    require(_value <= balances[msg.sender]);\r\n\r\n    // SafeMath.sub will throw if there is not enough balance.\r\n    balances[msg.sender] = balances[msg.sender].sub(_value);\r\n    balances[_to] = balances[_to].add(_value);\r\n    emit Transfer(msg.sender, _to, _value);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n  * @dev Gets the balance of the specified address.\r\n  * @param _owner The address to query the the balance of.\r\n  * @return An uint256 representing the amount owned by the passed address.\r\n  */\r\n  function balanceOf(address _owner) public view returns (uint256 balance) {\r\n    return balances[_owner];\r\n  }\r\n\r\n}\r\n\r\n/**\r\n * @title ERC20 interface\r\n * @dev see https://github.com/ethereum/EIPs/issues/20\r\n */\r\ncontract ERC20 is ERC20Basic {\r\n  function allowance(address owner, address spender) public view returns (uint256);\r\n  function transferFrom(address from, address to, uint256 value) public returns (bool);\r\n  function approve(address spender, uint256 value) public returns (bool);\r\n  event Approval(address indexed owner, address indexed spender, uint256 value);\r\n}\r\n\r\n/**\r\n * @title Standard ERC20 token\r\n *\r\n * @dev Implementation of the basic standard token.\r\n * @dev https://github.com/ethereum/EIPs/issues/20\r\n * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol\r\n */\r\ncontract StandardToken is ERC20, BasicToken {\r\n\r\n  // Name of the token\r\n  string constant public name = \"Quant\";\r\n  // Token abbreviation\r\n  string constant public symbol = \"QNT\";\r\n  // Decimal places\r\n  uint8 constant public decimals = 18;\r\n  // Zeros after the point\r\n  uint256 constant public DECIMAL_ZEROS = 1000000000000000000;\r\n\r\n  mapping (address => mapping (address => uint256)) internal allowed;\r\n\r\n  address public crowdsale;\r\n\r\n  modifier onlyCrowdsale() {\r\n    require(msg.sender == crowdsale);\r\n    _;\r\n  }\r\n\r\n  function StandardToken(address _crowdsale) public {\r\n    require(_crowdsale != address(0));\r\n    crowdsale = _crowdsale;\r\n  }\r\n\r\n  function mint(address _address, uint256 _value) public onlyCrowdsale {\r\n    balances[_address] = balances[_address].add(_value);\r\n    emit Transfer(0, _address, _value);\r\n  }\r\n\r\n  /**\r\n   * @dev Transfer tokens from one address to another\r\n   * @param _from address The address which you want to send tokens from\r\n   * @param _to address The address which you want to transfer to\r\n   * @param _value uint256 the amount of tokens to be transferred\r\n   */\r\n  function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {\r\n    require(_to != address(0));\r\n    require(_value <= balances[_from]);\r\n    require(_value <= allowed[_from][msg.sender]);\r\n\r\n    balances[_from] = balances[_from].sub(_value);\r\n    balances[_to] = balances[_to].add(_value);\r\n    allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);\r\n    emit Transfer(_from, _to, _value);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.\r\n   *\r\n   * Beware that changing an allowance with this method brings the risk that someone may use both the old\r\n   * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this\r\n   * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:\r\n   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\r\n   * @param _spender The address which will spend the funds.\r\n   * @param _value The amount of tokens to be spent.\r\n   */\r\n  function approve(address _spender, uint256 _value) public returns (bool) {\r\n    allowed[msg.sender][_spender] = _value;\r\n    emit Approval(msg.sender, _spender, _value);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @dev Function to check the amount of tokens that an owner allowed to a spender.\r\n   * @param _owner address The address which owns the funds.\r\n   * @param _spender address The address which will spend the funds.\r\n   * @return A uint256 specifying the amount of tokens still available for the spender.\r\n   */\r\n  function allowance(address _owner, address _spender) public view returns (uint256) {\r\n    return allowed[_owner][_spender];\r\n  }\r\n\r\n  /**\r\n   * @dev Increase the amount of tokens that an owner allowed to a spender.\r\n   *\r\n   * approve should be called when allowed[_spender] == 0. To increment\r\n   * allowed value is better to use this function to avoid 2 calls (and wait until\r\n   * the first transaction is mined)\r\n   * From MonolithDAO Token.sol\r\n   * @param _spender The address which will spend the funds.\r\n   * @param _addedValue The amount of tokens to increase the allowance by.\r\n   */\r\n  function increaseApproval(address _spender, uint _addedValue) public returns (bool) {\r\n    allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);\r\n    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);\r\n    return true;\r\n  }\r\n\r\n  /**\r\n   * @dev Decrease the amount of tokens that an owner allowed to a spender.\r\n   *\r\n   * approve should be called when allowed[_spender] == 0. To decrement\r\n   * allowed value is better to use this function to avoid 2 calls (and wait until\r\n   * the first transaction is mined)\r\n   * From MonolithDAO Token.sol\r\n   * @param _spender The address which will spend the funds.\r\n   * @param _subtractedValue The amount of tokens to decrease the allowance by.\r\n   */\r\n  function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {\r\n    uint oldValue = allowed[msg.sender][_spender];\r\n    if (_subtractedValue > oldValue) {\r\n      allowed[msg.sender][_spender] = 0;\r\n    } else {\r\n      allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);\r\n    }\r\n    emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]);\r\n    return true;\r\n  }\r\n\r\n}","deployed_bytecode":"0x6060604052600436106101a1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630601f9fe146101ab5780630a4740ff146101f8578063144fa6d71461020d5780631792b0bc146102465780631e2d06c31461025b5780632c4e722e146102a85780632e450881146102d15780633feb5f2b146102fa5780634042b66f1461035d57806342f3938114610386578063448c23e6146103af57806357eb3431146103fc5780637365e2d71461043e5780637a0b294c146104675780637d2402d6146104715780637df042a21461049e5780638008d5bc146104c757806383fae425146104f45780638488ff07146105365780638da5cb5b14610583578063922497fc146105d857806394f3217c14610601578063a43be57b1461062a578063b1144c9a1461063f578063b19fde5a1461068c578063c683d8e4146106d9578063d0febe4c146106ee578063e0d2771d146106f8578063e3cc65e214610721578063f921991c1461074a578063fa89401a14610776578063fbdafaf9146107af578063fc0c546a14610812575b6101a9610867565b005b34156101b657600080fd5b6101e2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a89565b6040518082815260200191505060405180910390f35b341561020357600080fd5b61020b610ad2565b005b341561021857600080fd5b610244600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b4b565b005b341561025157600080fd5b610259610bea565b005b341561026657600080fd5b610292600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e36565b6040518082815260200191505060405180910390f35b34156102b357600080fd5b6102bb610e4e565b6040518082815260200191505060405180910390f35b34156102dc57600080fd5b6102e4610e54565b6040518082815260200191505060405180910390f35b341561030557600080fd5b61031b6004808035906020019091905050610e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561036857600080fd5b610370610ea2565b6040518082815260200191505060405180910390f35b341561039157600080fd5b610399610ea8565b6040518082815260200191505060405180910390f35b34156103ba57600080fd5b6103e6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610eae565b6040518082815260200191505060405180910390f35b341561040757600080fd5b61043c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610ec6565b005b341561044957600080fd5b610451610f5f565b6040518082815260200191505060405180910390f35b61046f610f65565b005b341561047c57600080fd5b6104846111eb565b604051808215151515815260200191505060405180910390f35b34156104a957600080fd5b6104b16111fe565b6040518082815260200191505060405180910390f35b34156104d257600080fd5b6104da611204565b604051808215151515815260200191505060405180910390f35b34156104ff57600080fd5b610534600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611217565b005b341561054157600080fd5b61056d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112bb565b6040518082815260200191505060405180910390f35b341561058e57600080fd5b610596611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105e357600080fd5b6105eb61132a565b6040518082815260200191505060405180910390f35b341561060c57600080fd5b610614611330565b6040518082815260200191505060405180910390f35b341561063557600080fd5b61063d61133c565b005b341561064a57600080fd5b610676600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113f5565b6040518082815260200191505060405180910390f35b341561069757600080fd5b6106c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061140d565b6040518082815260200191505060405180910390f35b34156106e457600080fd5b6106ec611456565b005b6106f6610867565b005b341561070357600080fd5b61070b6114cf565b6040518082815260200191505060405180910390f35b341561072c57600080fd5b6107346114db565b6040518082815260200191505060405180910390f35b341561075557600080fd5b61077460048080359060200190919080359060200190919050506114e8565b005b341561078157600080fd5b6107ad600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611740565b005b34156107ba57600080fd5b6107d060048080359060200190919050506119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561081d57600080fd5b6108256119e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000600860009054906101000a900460ff16151561088757600080fd5b33925034915061089683611a0c565b670de0b6b3a764000082101515156108ad57600080fd5b6108c260015483611a4b90919063ffffffff16565b90506108d981600b54611a8690919063ffffffff16565b600b81905550600c54600b54111515156108f257600080fd5b61090782600354611a8690919063ffffffff16565b600381905550600780548060010182816109219190611d40565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506109c281600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8690919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e848460015460405180848152602001838152602001828152602001935050505060405180910390a3610a8482611aa4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b2e57600080fd5b6000600860006101000a81548160ff021916908315150217905550565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ba757600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c4c57600080fd5b600093505b600780549050841015610e3057600784815481101515610c6d57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115610ddf57610dde6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484611b09565b5b6000811115610e1557610e146000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483611b09565b5b610e29600185611a8690919063ffffffff16565b9350610c51565b50505050565b60056020528060005260406000206000915090505481565b60015481565b6a0c685fa11e01ec6f00000081565b600781815481101515610e7257fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60025481565b60066020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f2257600080fd5b610f4b610f3a60025483611bc090919063ffffffff16565b600354611a8690919063ffffffff16565b600381905550610f5b8282611bdb565b5050565b600a5481565b600080600080600080600860019054906101000a900460ff161515610f8957600080fd5b600860009054906101000a900460ff161515610fa457600080fd5b339550349450610fb386611a0c565b674563918244f400008510151515610fca57600080fd5b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061102a61102460025487611a4b90919063ffffffff16565b85611d0e565b92506110368684611bdb565b61108883600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d2790919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110e060025484611bc090919063ffffffff16565b91506110f58286611d2790919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561113757600080fd5b61115e61114d8287611d2790919063ffffffff16565b600354611a8690919063ffffffff16565b6003819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e848660025460405180848152602001838152602001828152602001935050505060405180910390a36111e382611aa4565b505050505050565b600860019054906101000a900460ff1681565b600b5481565b600860009054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561127357600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b670de0b6b3a764000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139a57600080fd5b6000600860016101000a81548160ff0219169083151502179055506113d5600a546a0c685fa11e01ec6f000000611d2790919063ffffffff16565b90506113ec81600c54611a8690919063ffffffff16565b600c8190555050565b60096020528060005260406000206000915090505481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114b257600080fd5b6001600860006101000a81548160ff021916908315150217905550565b674563918244f4000081565b6000600780549050905090565b600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561154a57600080fd5b8593505b61155f600780549050868801611d0e565b8410156117385760078481548110151561157557fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156116e7576116e66000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484611b09565b5b600081111561171d5761171c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483611b09565b5b611731600185611a8690919063ffffffff16565b935061154e565b505050505050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561179f57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156117fc57600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915061185382600b54611d2790919063ffffffff16565b600b8190555061188261187160015484611bc090919063ffffffff16565b600354611d2790919063ffffffff16565b600381905550600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118df81600a54611d2790919063ffffffff16565b600a8190555061190e6118fd60025483611bc090919063ffffffff16565b600354611d2790919063ffffffff16565b6003819055506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60006007828154811015156119b457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4857600080fd5b50565b6000806000841415611a605760009150611a7f565b8284029050828482811515611a7157fe5b04141515611a7b57fe5b8091505b5092915050565b6000808284019050838110151515611a9a57fe5b8091505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611b0657600080fd5b50565b8273ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515611bab57600080fd5b5af11515611bb857600080fd5b505050505050565b6000808284811515611bce57fe5b0490508091505092915050565b611bf081600a54611a8690919063ffffffff16565b600a819055506a0c685fa11e01ec6f000000600a5411151515611c1257600080fd5b60078054806001018281611c269190611d40565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611cc781600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000818310611d1d5781611d1f565b825b905092915050565b6000828211151515611d3557fe5b818303905092915050565b815481835581811511611d6757818360005260206000209182019101611d669190611d6c565b5b505050565b611d8e91905b80821115611d8a576000816000905550600101611d72565b5090565b905600a165627a7a72305820a325f6a65abf0486ddf7ae77816bb5da7d9f6166c42f17ca3f6c771555b3777c0029","optimization_enabled":false,"verified_twin_address_hash":null,"is_verified":true,"compiler_settings":{"optimizer":{"enabled":false,"runs":0}},"optimization_runs":null,"sourcify_repo_url":null,"decoded_constructor_args":[["0xF5E38bBEDC78EfeA055e0C56035AdB320E64C4Bc",{"name":"_owner","type":"address"}],["430",{"name":"_rate","type":"uint256"}],["687",{"name":"_presaleRate","type":"uint256"}],["14467000000000000000000000",{"name":"_ownerInitialTokens","type":"uint256"}]],"compiler_version":"0.4.21+commit.dfe3193c","is_verified_via_verifier_alliance":true,"verified_at":"2025-09-01T03:54:31.223548Z","implementations":[],"proxy_type":null,"external_libraries":[],"creation_bytecode":"0x60606040526001600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506000600a556000600b556a0d3c21bcecceda10000000600c5560405160808062002052833981016040528080519060200190919080519060200190919080519060200190919080519060200190919050506000831115156200009b57600080fd5b600082111515620000ab57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515620000e857600080fd5b826001819055508160028190555083600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600780548060010182816200014d91906200022e565b91600052602060002090016000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508060056000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050505062000285565b81548183558181151162000258578183600052602060002091820191016200025791906200025d565b5b505050565b6200028291905b808211156200027e57600081600090555060010162000264565b5090565b90565b611dbd80620002956000396000f3006060604052600436106101a1576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff1680630601f9fe146101ab5780630a4740ff146101f8578063144fa6d71461020d5780631792b0bc146102465780631e2d06c31461025b5780632c4e722e146102a85780632e450881146102d15780633feb5f2b146102fa5780634042b66f1461035d57806342f3938114610386578063448c23e6146103af57806357eb3431146103fc5780637365e2d71461043e5780637a0b294c146104675780637d2402d6146104715780637df042a21461049e5780638008d5bc146104c757806383fae425146104f45780638488ff07146105365780638da5cb5b14610583578063922497fc146105d857806394f3217c14610601578063a43be57b1461062a578063b1144c9a1461063f578063b19fde5a1461068c578063c683d8e4146106d9578063d0febe4c146106ee578063e0d2771d146106f8578063e3cc65e214610721578063f921991c1461074a578063fa89401a14610776578063fbdafaf9146107af578063fc0c546a14610812575b6101a9610867565b005b34156101b657600080fd5b6101e2600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610a89565b6040518082815260200191505060405180910390f35b341561020357600080fd5b61020b610ad2565b005b341561021857600080fd5b610244600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b4b565b005b341561025157600080fd5b610259610bea565b005b341561026657600080fd5b610292600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610e36565b6040518082815260200191505060405180910390f35b34156102b357600080fd5b6102bb610e4e565b6040518082815260200191505060405180910390f35b34156102dc57600080fd5b6102e4610e54565b6040518082815260200191505060405180910390f35b341561030557600080fd5b61031b6004808035906020019091905050610e63565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561036857600080fd5b610370610ea2565b6040518082815260200191505060405180910390f35b341561039157600080fd5b610399610ea8565b6040518082815260200191505060405180910390f35b34156103ba57600080fd5b6103e6600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610eae565b6040518082815260200191505060405180910390f35b341561040757600080fd5b61043c600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610ec6565b005b341561044957600080fd5b610451610f5f565b6040518082815260200191505060405180910390f35b61046f610f65565b005b341561047c57600080fd5b6104846111eb565b604051808215151515815260200191505060405180910390f35b34156104a957600080fd5b6104b16111fe565b6040518082815260200191505060405180910390f35b34156104d257600080fd5b6104da611204565b604051808215151515815260200191505060405180910390f35b34156104ff57600080fd5b610534600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050611217565b005b341561054157600080fd5b61056d600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506112bb565b6040518082815260200191505060405180910390f35b341561058e57600080fd5b610596611304565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34156105e357600080fd5b6105eb61132a565b6040518082815260200191505060405180910390f35b341561060c57600080fd5b610614611330565b6040518082815260200191505060405180910390f35b341561063557600080fd5b61063d61133c565b005b341561064a57600080fd5b610676600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506113f5565b6040518082815260200191505060405180910390f35b341561069757600080fd5b6106c3600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190505061140d565b6040518082815260200191505060405180910390f35b34156106e457600080fd5b6106ec611456565b005b6106f6610867565b005b341561070357600080fd5b61070b6114cf565b6040518082815260200191505060405180910390f35b341561072c57600080fd5b6107346114db565b6040518082815260200191505060405180910390f35b341561075557600080fd5b61077460048080359060200190919080359060200190919050506114e8565b005b341561078157600080fd5b6107ad600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050611740565b005b34156107ba57600080fd5b6107d060048080359060200190919050506119a3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b341561081d57600080fd5b6108256119e7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806000600860009054906101000a900460ff16151561088757600080fd5b33925034915061089683611a0c565b670de0b6b3a764000082101515156108ad57600080fd5b6108c260015483611a4b90919063ffffffff16565b90506108d981600b54611a8690919063ffffffff16565b600b81905550600c54600b54111515156108f257600080fd5b61090782600354611a8690919063ffffffff16565b600381905550600780548060010182816109219190611d40565b9160005260206000209001600085909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506109c281600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8690919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e848460015460405180848152602001838152602001828152602001935050505060405180910390a3610a8482611aa4565b505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610b2e57600080fd5b6000600860006101000a81548160ff021916908315150217905550565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ba757600080fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610c4c57600080fd5b600093505b600780549050841015610e3057600784815481101515610c6d57fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000821115610ddf57610dde6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484611b09565b5b6000811115610e1557610e146000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483611b09565b5b610e29600185611a8690919063ffffffff16565b9350610c51565b50505050565b60056020528060005260406000206000915090505481565b60015481565b6a0c685fa11e01ec6f00000081565b600781815481101515610e7257fe5b90600052602060002090016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60035481565b60025481565b60066020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610f2257600080fd5b610f4b610f3a60025483611bc090919063ffffffff16565b600354611a8690919063ffffffff16565b600381905550610f5b8282611bdb565b5050565b600a5481565b600080600080600080600860019054906101000a900460ff161515610f8957600080fd5b600860009054906101000a900460ff161515610fa457600080fd5b339550349450610fb386611a0c565b674563918244f400008510151515610fca57600080fd5b600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054935061102a61102460025487611a4b90919063ffffffff16565b85611d0e565b92506110368684611bdb565b61108883600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611d2790919063ffffffff16565b600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506110e060025484611bc090919063ffffffff16565b91506110f58286611d2790919063ffffffff16565b90508573ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050151561113757600080fd5b61115e61114d8287611d2790919063ffffffff16565b600354611a8690919063ffffffff16565b6003819055508573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167efe0e12b43090c1fc19a34aefa5cc138a4eeafc60ab800f855c730b3fb9480e848660025460405180848152602001838152602001828152602001935050505060405180910390a36111e382611aa4565b505050505050565b600860019054906101000a900460ff1681565b600b5481565b600860009054906101000a900460ff1681565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561127357600080fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b670de0b6b3a764000081565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561139a57600080fd5b6000600860016101000a81548160ff0219169083151502179055506113d5600a546a0c685fa11e01ec6f000000611d2790919063ffffffff16565b90506113ec81600c54611a8690919063ffffffff16565b600c8190555050565b60096020528060005260406000206000915090505481565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415156114b257600080fd5b6001600860006101000a81548160ff021916908315150217905550565b674563918244f4000081565b6000600780549050905090565b600080600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561154a57600080fd5b8593505b61155f600780549050868801611d0e565b8410156117385760078481548110151561157557fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549150600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008211156116e7576116e66000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168484611b09565b5b600081111561171d5761171c6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff168483611b09565b5b611731600185611a8690919063ffffffff16565b935061154e565b505050505050565b600080600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561179f57600080fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156117fc57600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054915061185382600b54611d2790919063ffffffff16565b600b8190555061188261187160015484611bc090919063ffffffff16565b600354611d2790919063ffffffff16565b600381905550600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506118df81600a54611d2790919063ffffffff16565b600a8190555061190e6118fd60025483611bc090919063ffffffff16565b600354611d2790919063ffffffff16565b6003819055506000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b60006007828154811015156119b457fe5b906000526020600020900160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515611a4857600080fd5b50565b6000806000841415611a605760009150611a7f565b8284029050828482811515611a7157fe5b04141515611a7b57fe5b8091505b5092915050565b6000808284019050838110151515611a9a57fe5b8091505092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501515611b0657600080fd5b50565b8273ffffffffffffffffffffffffffffffffffffffff166340c10f1983836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1515611bab57600080fd5b5af11515611bb857600080fd5b505050505050565b6000808284811515611bce57fe5b0490508091505092915050565b611bf081600a54611a8690919063ffffffff16565b600a819055506a0c685fa11e01ec6f000000600a5411151515611c1257600080fd5b60078054806001018281611c269190611d40565b9160005260206000209001600084909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050611cc781600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611a8690919063ffffffff16565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b6000818310611d1d5781611d1f565b825b905092915050565b6000828211151515611d3557fe5b818303905092915050565b815481835581811511611d6757818360005260206000209182019101611d669190611d6c565b5b505050565b611d8e91905b80821115611d8a576000816000905550600101611d72565b5090565b905600a165627a7a72305820a325f6a65abf0486ddf7ae77816bb5da7d9f6166c42f17ca3f6c771555b3777c0029000000000000000000000000f5e38bbedc78efea055e0c56035adb320e64c4bc00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000002af0000000000000000000000000000000000000000000bf781a43734f3ebe00000","name":"Crowdsale","is_blueprint":false,"license_type":"none","is_fully_verified":false,"is_verified_via_eth_bytecode_db":true,"language":"solidity","evm_version":"default","can_be_visualized_via_sol2uml":true,"is_verified_via_sourcify":false,"additional_sources":[],"certified":false,"conflicting_implementations":null,"abi":[{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getNumPresaleTokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"disableSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_token","type":"address"}],"name":"setToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"transferTokens","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"regularTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PRESALETOKENMAXSALES","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"investors","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"presaleRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"presaleTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"},{"name":"_presaleTokens","type":"uint256"}],"name":"recordPresalePurchase","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalPresaleTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"buyPresaleTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"inPresale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalRegularTokensSold","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"inSale","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"},{"name":"allocation","type":"uint256"}],"name":"setPresaleAllocation","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_address","type":"address"}],"name":"getNumRegularTokensBought","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"regularTokenMaxSales","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUMINVESTMENTSALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"endPresale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"presaleAllocations","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"investor","type":"address"}],"name":"getPresaleAllocation","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"enableSale","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUMINVESTMENTPRESALE","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getInvestorsLength","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"offset","type":"uint256"},{"name":"limit","type":"uint256"}],"name":"transferTokensWithOffsetAndLimit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"investor","type":"address"}],"name":"refund","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_index","type":"uint256"}],"name":"getInvestorAtIndex","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owner","type":"address"},{"name":"_rate","type":"uint256"},{"name":"_presaleRate","type":"uint256"},{"name":"_ownerInitialTokens","type":"uint256"}],"payable":true,"stateMutability":"payable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"},{"indexed":false,"name":"rate","type":"uint256"}],"name":"TokenPurchase","type":"event"}],"is_changed_bytecode":false,"is_partially_verified":true,"constructor_args":"0x000000000000000000000000f5e38bbedc78efea055e0c56035adb320e64c4bc00000000000000000000000000000000000000000000000000000000000001ae00000000000000000000000000000000000000000000000000000000000002af0000000000000000000000000000000000000000000bf781a43734f3ebe00000"}