Contract Overview
Balance: 0.2138 Ether
Ether Value: $43.89 (@ $205.27/ETH)
Transactions: 4261 txns
 Latest 25 txns From a total of 4261 Transactions

TxHash Age From To Value [TxFee]
0xa4c3cfa8b4e219895219dfbeb655edfdd332580dc49b081366d54212bff37ab32 days 9 hrs ago0xca1a7ecd9e0cf8330f71fbf5facf78890644f058  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00155614308
0xdb36011f00852f1a5786fd49e511b1c723e82a5ae22aa32133fa980ed2ac7a6d2 days 9 hrs ago0xe9f639c69efa015d65ee0aa8889a904bf32afd4f  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00155681322
0xbbe93c48773724c32c64f8cd5617c03748c69bd9b84aee17c32751ae2a24d8a02 days 16 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.001704156
0xb82e8042153b962dbc1d1331daedb79e8cf5d447b93ede7ed032284b9786d2792 days 16 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006539335
0xa8967da7fea5c46888dd22a0db4e55d6c70caa8efaf80ed7ce7b508c009a1da92 days 16 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.001024387
0x73e1b8398ec8e85283be32d036553eb8273a3d2af287120846946189311ed8c82 days 17 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.004045716
0x62f61f2cddd21db3cc1de3b1bb32103df899b2f32096320c01ebd56844c276fc2 days 17 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.001076432
0x734c363bb75cba426480760a9486d77bfac648d35b9ecb0e67cb0ff3cc6563bc2 days 17 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00094323
0x7e85c616026f08da8100deadc394612624ae5ab63433c348d81505e0d49b2c753 days 21 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00127054
0xe11ed7df0cebc6d2cd298545072f0af144a5497126b9883df7916255f9be5c803 days 21 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.001016432
0x818f0ff598db195106029f8c627e8aa9fe1ad93d393df823cabe8992046ad3a24 days 4 hrs ago0x2456a222c2e609f7afc419750b7a4ea085323cc1  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.005086165
0x6ff2cbfb3f17848f186e750a59500ec629716baf182c5ca8a9d35e9c63d647254 days 4 hrs ago0x2456a222c2e609f7afc419750b7a4ea085323cc1  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.004120324
0xf10eb3124c3896d224d00b1c2785c06bff9708e25073057bc52958cc683fdf4d4 days 4 hrs ago0x2456a222c2e609f7afc419750b7a4ea085323cc1  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.002183742
0x35a7213fe9dbb81f875e3475cf76fdfd0478a87d0876a100baf9a6897a6ce7084 days 4 hrs ago0x2456a222c2e609f7afc419750b7a4ea085323cc1  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0.05 Ether0.000261252
0xf403f4b3e2938b864a5cd1a9de4ca3f666cbfa532a068430494f41b742f510004 days 6 hrs ago0x2456a222c2e609f7afc419750b7a4ea085323cc1  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0.05 Ether0.000195375
0x4a75cffc0790ddb9fb698788bcc9219c3be3706c8bcd630e8f073b6beeba22c34 days 7 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006098592
0x7768d86c8a98f6967263f411ec6677a1b0e0a1e73d518a3804d9c8424d907b974 days 15 hrs ago0xca1a7ecd9e0cf8330f71fbf5facf78890644f058  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.001186384017
0x6b02eb5d56acded37955d9e7feea945a57c6dc7c07fd9a6399c0ab9b80ddd6155 days 5 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006618905
0x37925f26c724132978cfd7973824a89b936684ee737a2772cb21baef83c81d7a5 days 21 hrs ago0xca1a7ecd9e0cf8330f71fbf5facf78890644f058  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.004027401
0x22ab246b66f269f688130ef44cd493534f9a291430363b162b781bf776bf74067 days 19 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0.01 Ether0.000718443
0x90024111cfa112538e7ae0f2d0d658d24ca82acaef45a778bf74f807587de99e7 days 23 hrs ago0x8033562521fedecdcc05487303522375597f9094  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00127054
0xc4649c1a024d4c3c39388ad062a5d1101717503997dd5ecc89fba6e93930da198 days 5 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.003215398
0xc1e263def32524c52e7ce87c4e0bf1d69fd226ab94307bec53f85fa591f1c2e78 days 6 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.003254234
0x321cb8175bd32245ffef47eac65e1010424685312264a5ad301657f7dafac0a38 days 7 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.003213646
0xbf193508007bc565050e0ac5320ff8a85cd46b29d08eea6e423b69bfbe3b88968 days 7 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.003239634
[ Download CSV Export  ] 
 Internal Transactions as a result of Contract Execution
 Latest 25 Internal Txns, Click Here To View More View All
ParentTxHash Block Age From To Value
0x35a7213fe9dbb81f875e3475cf76fdfd0478a87d0876a100baf9a6897a6ce70865245624 days 4 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.049 Ether
0x22ab246b66f269f688130ef44cd493534f9a291430363b162b781bf776bf740665024477 days 19 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0x479be436e3d9a15fe08dde7b764dadfbf49feb82a79a2bb2637c77e3be0f8bbc64940729 days 3 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x0f8a19e76353963fddcd8d7d5ded4038d81cb37bb93741e2222037c45118a7a864936649 days 5 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x699765f14505bdfff5e6cf937dd0ef0e897d46f54edeefbd5d6d6b06ae14382d647968111 days 11 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x9f1f066531c7864eadcaef2a2218247f3a1de3c15a6fd302f64c29c98328b94b647093712 days 21 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x9e70197980f03e92f5f26449014e0601d2676abb3d011949b4243eba971e3cd2645065916 days 4 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.049 Ether
0x7cf3cf3dd87ebd0210dce4a4b1995401cbb9f6442a890bde652a1818a86617ce645038416 days 5 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xafd54b3da2792670bf39fa7ffe01a57d2facf1388d8193f89e750e2e272056c5644829616 days 13 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x17d8d1e01143048e561356f239e45e41465fc1558c77562aad9ce473a2d44f18644829616 days 13 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x326f50bacb0582bfdce123d9f5c8a4551074a69a88626b6cf3ae2665ca670e29644389417 days 7 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0147 Ether
0x21d9222554ec53f43503b91c39411c34bf8c4e200e276f0e052337253741be00643432918 days 20 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0x63d3d5ec46c18cedcabddccd1da73805a55e430621ee2b38699baf5ef98a1eed641512322 days 9 mins ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0xdf4cf24c826ff3a40540e1eb052e45327d345cedf6561d499442dca272e4abb7641428222 days 3 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0735 Ether
0x66cdfc507715906bd50ceacb475170124d1dde4727da62897c98fff2ba31f48c639861324 days 17 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x7d06b7099aa48800b06a9bfa5dd8a5269896ca4538ac9300c1f0475af1f3ea8f639852124 days 17 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xcb6b816229786fc9cf2b83fa41f335cd1ccb2f9e469b555d1e0bc1b108f28c21638446727 days 51 mins ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x144b3b0552dc3d0191ad0d3a5cbca485e2334850a3b8e6929632e9e62dab8cc6637992727 days 18 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0xccca9a37e34779711edafeee44871016d73866b28e11d802ded0cfe2c10d9103637554228 days 12 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0xa2db43f80a144c87b8d7f2cb3c30e423c4331d2d9721f372b1fb83af2eb8dcf5636292730 days 14 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0x5b76aa09bb00d6af803622e78362551062124fc4fc5718968cf9cd7bf7951778635846331 days 7 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x4746532299ff2facb2abce058c30a142236fe05191e9399496442b58fc5a5f1c635606631 days 17 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x92150883a5c7aac374a8daea679d08c3e16f00ebbbba80175c6f07ed11b4e33b635595131 days 17 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xa911127307912d50b003d589083e3450e3210cde68d17fde7bc95c6b711102c9635486631 days 22 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x85f7b44958692eb4ffbe951597e1324d6f81797bfbb23383ece0bca3ffd51648635188732 days 10 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
[ Download CSV Export  ] 
Warning: The Compiled Contract might be susceptible to ExpExponentCleanup (medium/high-severity), EventStructWrongData (very low-severity) SolidityCompiler Bugs.

Contract Source Code Verified (Exact Match)
Contract Name: CryptoCrystal
Compiler Text: v0.4.23+commit.124ca40d
Optimization Enabled: No
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity ^0.4.23;

// File: contracts/zeppelin-solidity/contracts/ownership/Ownable.sol

/**
 * @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.
   */
  function Ownable() public {
    owner = msg.sender;
  }

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

  /**
   * @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));
    OwnershipTransferred(owner, newOwner);
    owner = newOwner;
  }

}

// File: contracts/Acceptable.sol

// @title Acceptable
// @author Takayuki Jimba
// @dev Provide basic access control.
contract Acceptable is Ownable {
    address public sender;

    // @dev Throws if called by any address other than the sender.
    modifier onlyAcceptable {
        require(msg.sender == sender);
        _;
    }

    // @dev Change acceptable address
    // @param _sender The address to new sender
    function setAcceptable(address _sender) public onlyOwner {
        sender = _sender;
    }
}

// File: contracts/zeppelin-solidity/contracts/token/ERC721/ERC721Basic.sol

/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Basic {
  event Transfer(address indexed _from, address indexed _to, uint256 _tokenId);
  event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId);
  event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);  

  function balanceOf(address _owner) public view returns (uint256 _balance);
  function ownerOf(uint256 _tokenId) public view returns (address _owner);
  function exists(uint256 _tokenId) public view returns (bool _exists);
  
  function approve(address _to, uint256 _tokenId) public;
  function getApproved(uint256 _tokenId) public view returns (address _operator);
  
  function setApprovalForAll(address _operator, bool _approved) public;
  function isApprovedForAll(address _owner, address _operator) public view returns (bool);

  function transferFrom(address _from, address _to, uint256 _tokenId) public;
  function safeTransferFrom(address _from, address _to, uint256 _tokenId) public;  
  function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public;
}

// File: contracts/zeppelin-solidity/contracts/token/ERC721/ERC721.sol

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Enumerable is ERC721Basic {
  function totalSupply() public view returns (uint256);
  function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId);
  function tokenByIndex(uint256 _index) public view returns (uint256);
}

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721Metadata is ERC721Basic {
  function name() public view returns (string _name);
  function symbol() public view returns (string _symbol);
  function tokenURI(uint256 _tokenId) public view returns (string);
}

/**
 * @title ERC-721 Non-Fungible Token Standard, full implementation interface
 * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md
 */
contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata {
}

// File: contracts/CrystalBaseIF.sol

// @title CrystalBaseIF
// @author Takayuki Jimba
contract CrystalBaseIF is ERC721 {
    function mint(address _owner, uint256 _gene, uint256 _kind, uint256 _weight) public returns(uint256);
    function burn(address _owner, uint256 _tokenId) public;
    function _transferFrom(address _from, address _to, uint256 _tokenId) public;
    function getCrystalKindWeight(uint256 _tokenId) public view returns(uint256 kind, uint256 weight);
    function getCrystalGeneKindWeight(uint256 _tokenId) public view returns(uint256 gene, uint256 kind, uint256 weight);
}

// File: contracts/zeppelin-solidity/contracts/math/SafeMath.sol

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
 */
library SafeMath {

  /**
  * @dev Multiplies two numbers, throws on overflow.
  */
  function mul(uint256 a, uint256 b) internal pure returns (uint256) {
    if (a == 0) {
      return 0;
    }
    uint256 c = a * b;
    assert(c / a == b);
    return c;
  }

  /**
  * @dev Integer division of two numbers, truncating the quotient.
  */
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    // assert(b > 0); // Solidity automatically throws when dividing by 0
    uint256 c = a / b;
    // assert(a == b * c + a % b); // There is no case in which this doesn't hold
    return c;
  }

  /**
  * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
  */
  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    assert(b <= a);
    return a - b;
  }

  /**
  * @dev Adds two numbers, throws on overflow.
  */
  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    assert(c >= a);
    return c;
  }
}

// File: contracts/MiningSupplier.sol

// @title MiningSupplier
// @author Takayuki Jimba
contract MiningSupplier {
    using SafeMath for uint256;

    uint256 public constant secondsPerYear = 1 years * 1 seconds;
    uint256 public constant secondsPerDay = 1 days * 1 seconds;

    // @dev Number of blocks per year
    function _getBlocksPerYear(
        uint256 _secondsPerBlock
    ) public pure returns(uint256) {
        return secondsPerYear.div(_secondsPerBlock);
    }

    // @dev 0-based block number index
    //      First block number index of every years is 0
    function _getBlockIndexAtYear(
        uint256 _initialBlockNumber,
        uint256 _currentBlockNumber,
        uint256 _secondsPerBlock
    ) public pure returns(uint256) {
        //require(_currentBlockNumber >= _initialBlockNumber, "current is large than or equal to initial");
        require(_currentBlockNumber >= _initialBlockNumber);
        uint256 _blockIndex = _currentBlockNumber.sub(_initialBlockNumber);
        uint256 _blocksPerYear = _getBlocksPerYear(_secondsPerBlock);
        return _blockIndex.sub(_blockIndex.div(_blocksPerYear).mul(_blocksPerYear));
    }

    // @dev Map block number to block index.
    //      First block is number 0.
    function _getBlockIndex(
        uint256 _initialBlockNumber,
        uint256 _currentBlockNumber
    ) public pure returns(uint256) {
        //require(_currentBlockNumber >= _initialBlockNumber, "current is large than or equal to initial");
        require(_currentBlockNumber >= _initialBlockNumber);
        return _currentBlockNumber.sub(_initialBlockNumber);
    }

    // @dev Map block number to year index.
    //      First (blocksPerYear - 1) blocks are number 0.
    function _getYearIndex(
        uint256 _secondsPerBlock,
        uint256 _initialBlockNumber,
        uint256 _currentBlockNumber
    ) public pure returns(uint256) {
        uint256 _blockIndex =  _getBlockIndex(_initialBlockNumber, _currentBlockNumber);
        uint256 _blocksPerYear = _getBlocksPerYear(_secondsPerBlock);
        return _blockIndex.div(_blocksPerYear);
    }

    // @dev
    function _getWaitingBlocks(
        uint256 _secondsPerBlock
    ) public pure returns(uint256) {
        return secondsPerDay.div(_secondsPerBlock);
    }

    function _getWeightUntil(
        uint256 _totalWeight,
        uint256 _yearIndex
    ) public pure returns(uint256) {
        uint256 _sum = 0;
        for(uint256 i = 0; i < _yearIndex; i++) {
            _sum = _sum.add(_totalWeight / (2 ** (i + 1)));
        }
        return _sum;
    }

    function _estimateSupply(
        uint256 _secondsPerBlock,
        uint256 _initialBlockNumber,
        uint256 _currentBlockNumber,
        uint256 _totalWeight
    ) public pure returns(uint256){
        uint256 _yearIndex = _getYearIndex(_secondsPerBlock, _initialBlockNumber, _currentBlockNumber); // 0-based
        uint256 _blockIndex = _getBlockIndexAtYear(_initialBlockNumber, _currentBlockNumber, _secondsPerBlock) + 1;
        uint256 _numerator = _totalWeight.mul(_secondsPerBlock).mul(_blockIndex);
        uint256 _yearFactor = 2 ** (_yearIndex + 1);
        uint256 _denominator =  _yearFactor.mul(secondsPerYear);
        uint256 _supply = _numerator.div(_denominator).add(_getWeightUntil(_totalWeight, _yearIndex));
        return _supply; // mg
    }

    function _estimateWeight(
        uint256 _secondsPerBlock,
        uint256 _initialBlockNumber,
        uint256 _currentBlockNumber,
        uint256 _totalWeight,
        uint256 _currentWeight
    ) public pure returns(uint256) {
        uint256 _supply = _estimateSupply(
            _secondsPerBlock,
            _initialBlockNumber,
            _currentBlockNumber,
            _totalWeight
        );
        uint256 _yearIndex = _getYearIndex(
            _secondsPerBlock,
            _initialBlockNumber,
            _currentBlockNumber
        ); // 0-based
        uint256 _yearFactor = 2 ** _yearIndex;
        uint256 _defaultWeight = 10000; // mg

        if(_currentWeight > _supply) {
            // (_supply / _currentWeight) * _defaultWeight / _yearFactor
            return _supply.mul(_defaultWeight).div(_currentWeight).div(_yearFactor);
        } else {
            // _defaultWeight / _yearFactor
            return _defaultWeight.div(_yearFactor);
        }
    }

    function _updateNeeded(
        uint256 _secondsPerBlock,
        uint256 _currentBlockNumber,
        uint256 _blockNumberUpdated
    ) public pure returns(bool) {
        if (_blockNumberUpdated == 0) {
            return true;
        }
        uint256 _waitingBlocks = _getWaitingBlocks(_secondsPerBlock);
        return _currentBlockNumber >= _blockNumberUpdated + _waitingBlocks;
    }
}

// File: contracts/CrystalWeightManager.sol

// @title CrystalWeightManager
// @author Takayuki Jimba
contract CrystalWeightManager is MiningSupplier {
    // Amounts of deposit of all crystals.
    // Each unit of weight is milligrams
    // e.g. 50000000000 means 50t.
    uint256[100] crystalWeights = [
        50000000000,226800000000,1312500000000,31500000000,235830000000,
        151200000000,655200000000,829500000000,7177734375,762300000000,
        684600000000,676200000000,5037226562,30761718750,102539062500,
        102539062500,102539062500,5126953125,31500000000,5040000000,
        20507812500,20507812500,10253906250,5024414062,6300000000,
        20507812500,102539062500,102539062500,102539062500,102539062500,
        102539062500,7690429687,15380859375,69300000000,10253906250,
        547050000000,15380859375,20507812500,15380859375,15380859375,
        20507812500,15380859375,7690429687,153808593750,92285156250,
        102539062500,71777343750,82031250000,256347656250,1384277343750,
        820312500000,743408203125,461425781250,563964843750,538330078125,
        358886718750,256347656250,358886718750,102539062500,307617187500,
        256347656250,51269531250,41015625000,307617187500,307617187500,
        2050781250,3588867187,2563476562,5126953125,399902343750,
        615234375000,563964843750,461425781250,358886718750,717773437500,
        41015625000,41015625000,2050781250,102539062500,102539062500,
        51269531250,102539062500,30761718750,41015625000,102539062500,
        102539062500,102539062500,205078125000,205078125000,556500000000,
        657300000000,41015625000,102539062500,30761718750,102539062500,
        20507812500,20507812500,20507812500,20507812500,82031250000
    ];

    uint256 public secondsPerBlock = 12;
    uint256 public initialBlockNumber = block.number;
    uint256 public constant originalTotalWeight = 21 * 10**13; // mg
    uint256 public currentWeight = 0;
    uint256 public estimatedWeight = 0;
    uint256 public blockNumberUpdated = 0;

    event UpdateEstimatedWeight(uint256 weight, uint256 nextUpdateBlockNumber);

    function setEstimatedWeight(uint256 _minedWeight) internal {
        currentWeight = currentWeight.add(_minedWeight);

        uint256 _currentBlockNumber = block.number;

        bool _isUpdate = _updateNeeded(
            secondsPerBlock,
            _currentBlockNumber,
            blockNumberUpdated
        );

        if(_isUpdate) {
            estimatedWeight = _estimateWeight(
                secondsPerBlock,
                initialBlockNumber,
                _currentBlockNumber,
                originalTotalWeight,
                currentWeight
            );
            blockNumberUpdated = _currentBlockNumber;

            emit UpdateEstimatedWeight(estimatedWeight, _currentBlockNumber);
        }
    }

    function getCrystalWeights() external view returns(uint256[100]) {
        return crystalWeights;
    }
}

// File: contracts/EOACallable.sol

// @title EOACallable
// @author Takayuki Jimba
contract EOACallable {
    function isContract(address addr) internal view returns (bool) {
        uint size;
        assembly { size := extcodesize(addr) }
        return size > 0;
    }

    modifier onlyEOA {
        require(!isContract(msg.sender));
        _;
    }
}

// File: contracts/ExchangeBaseIF.sol

// @title ExchangeBaseIF
// @author Takayuki Jimba
contract ExchangeBaseIF {
    function create(
        address _owner,
        uint256 _ownerTokenId,
        uint256 _ownerTokenGene,
        uint256 _ownerTokenKind,
        uint256 _ownerTokenWeight,
        uint256 _kind,
        uint256 _weight,
        uint256 _createdAt
    ) public returns(uint256);
    function remove(uint256 _id) public;
    function getExchange(uint256 _id) public view returns(
        address owner,
        uint256 tokenId,
        uint256 kind,
        uint256 weight,
        uint256 createdAt
    );
    function getTokenId(uint256 _id) public view returns(uint256);
    function ownerOf(uint256 _id) public view returns(address);
    function isOnExchange(uint256 _tokenId) public view returns(bool);
    function isOnExchangeById(uint256 _id) public view returns(bool);
}

// File: contracts/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol

/**
 * @title ERC20Basic
 * @dev Simpler version of ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/179
 */
contract ERC20Basic {
  function totalSupply() public view returns (uint256);
  function balanceOf(address who) public view returns (uint256);
  function transfer(address to, uint256 value) public returns (bool);
  event Transfer(address indexed from, address indexed to, uint256 value);
}

// File: contracts/zeppelin-solidity/contracts/token/ERC20/ERC20.sol

/**
 * @title ERC20 interface
 * @dev see https://github.com/ethereum/EIPs/issues/20
 */
contract ERC20 is ERC20Basic {
  function allowance(address owner, address spender) public view returns (uint256);
  function transferFrom(address from, address to, uint256 value) public returns (bool);
  function approve(address spender, uint256 value) public returns (bool);
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: contracts/PickaxeIF.sol

// @title PickaxeIF
// @author Takayuki Jimba
contract PickaxeIF is ERC20 {
    function transferFromOwner(address _to, uint256 _amount) public;
    function burn(address _from, uint256 _amount) public;
}

// File: contracts/RandomGeneratorIF.sol

// @title RandomGeneratorIF
// @author Takayuki Jimba
contract RandomGeneratorIF {
    function generate() public returns(uint64);
}

// File: contracts/Sellable.sol

// @title Sellable
// @author Takayuki Jimba
// @dev Sell tokens.
//      Token is supposed to be Pickaxe contract in our contracts.
//      Actual transferring tokens operation is to be implemented in inherited contract.
contract Sellable is Ownable {
    using SafeMath for uint256;

    address public wallet;
    uint256 public rate;

    address public donationWallet;
    uint256 public donationRate;

    uint256 public constant MIN_WEI_AMOUNT = 5 * 10**15;

    event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount);
    event ForwardFunds(address sender, uint256 value, uint256 deposit);
    event Donation(address sender, uint256 value);

    constructor(address _wallet, address _donationWallet, uint256 _donationRate) public {
        // 1 token = 0.005 ETH
        rate = 200;
        wallet = _wallet;
        donationWallet = _donationWallet;
        donationRate = _donationRate;
    }

    function setWallet(address _wallet) external onlyOwner {
        wallet = _wallet;
    }

    function setEthereumWallet(address _donationWallet) external onlyOwner {
        donationWallet = _donationWallet;
    }

    function () external payable {
        require(msg.value >= MIN_WEI_AMOUNT);
        buyPickaxes(msg.sender);
    }

    function buyPickaxes(address _beneficiary) public payable {
        require(msg.value >= MIN_WEI_AMOUNT);

        uint256 _weiAmount = msg.value;
        uint256 _tokens = _weiAmount.mul(rate).div(1 ether);

        require(_tokens.mul(1 ether).div(rate) == _weiAmount);

        _transferFromOwner(msg.sender, _tokens);
        emit TokenPurchase(msg.sender, _beneficiary, _weiAmount, _tokens);
        _forwardFunds();
    }

    function _transferFromOwner(address _to, uint256 _value) internal {
        /* MUST override */
    }

    function _forwardFunds() internal {
        uint256 donation = msg.value.div(donationRate); // 2%
        uint256 value = msg.value - donation;

        wallet.transfer(value);

        emit ForwardFunds(msg.sender, value, donation);

        uint256 donationEth = 2014000000000000000; // 2.014 ether
        if(address(this).balance >= donationEth) {
            donationWallet.transfer(donationEth);
            emit Donation(msg.sender, donationEth);
        }
    }
}

// File: contracts/CryptoCrystal.sol

// @title CryptoCrystal
// @author Takayuki Jimba
// @dev Almost all application specific logic is in this contract.
//      CryptoCrystal acts as a facade to Pixaxe(ERC20), CrystalBase(ERC721), ExchangeBase as to transactions.
contract CryptoCrystal is Sellable, EOACallable, CrystalWeightManager {
    PickaxeIF public pickaxe;
    CrystalBaseIF public crystal;
    ExchangeBaseIF public exchange;
    RandomGeneratorIF public generator;

    //event RandomGenerated(uint256 number);

    event MineCrystals(
        // miner of the crystal
        address indexed owner,
        // time of mining
        uint256 indexed minedAt,
        // tokenIds of mined crystals
        uint256[] tokenIds,
        // kinds of mined crystals
        uint256[] kinds,
        // weights of mined crystals
        uint256[] weights,
        // genes of mined crystals
        uint256[] genes
    );

    event MeltCrystals(
        // melter of the crystals
        address indexed owner,
        // time of melting
        uint256 indexed meltedAt,
        // tokenIds of melted crystals
        uint256[] meltedTokenIds,
        // tokenId of newly generated crystal
        uint256 tokenId,
        // kind of newly generated crystal
        uint256 kind,
        // weight of newly generated crystal
        uint256 weight,
        // gene of newly generated crystal
        uint256 gene
    );

    event CreateExchange(
        // id of exchange
        uint256 indexed id,
        // creator of the exchange
        address owner,
        // tokenId of exhibited crystal
        uint256 ownerTokenId,
        // gene of exhibited crystal
        uint256 ownerTokenGene,
        // kind of exhibited crystal
        uint256 ownerTokenKind,
        // weight of exhibited crystal
        uint256 ownerTokenWeight,
        // kind of condition for exchange
        uint256 kind,
        // weight of condition for exchange
        uint256 weight,
        // time of exchange creation
        uint256 createdAt
    );

    event CancelExchange(
        // id of excahnge
        uint256 indexed id,
        // creator of the exchange
        address owner,
        // tokenId of exhibited crystal
        uint256 ownerTokenId,
        // kind of exhibited crystal
        uint256 ownerTokenKind,
        // weight of exhibited crystal
        uint256 ownerTokenWeight,
        // time of exchange cancelling
        uint256 cancelledAt
    );

    event BidExchange(
        // id of exchange
        uint256 indexed id,
        // creator of the exchange
        address owner,
        // tokenId of exhibited crystal
        uint256 ownerTokenId,
        // gene of exhibited crystal
        uint256 ownerTokenGene,
        // kind of exhibited crystal
        uint256 ownerTokenKind,
        // weight of exhibited crystal
        uint256 ownerTokenWeight,
        // exchanger who bid to exchange
        address exchanger,
        // tokenId of crystal to exchange
        uint256 exchangerTokenId,
        // kind of crystal to exchange
        uint256 exchangerTokenKind,
        // weight of crystal to exchange (may not be the same to weight condition)
        uint256 exchangerTokenWeight,
        // time of bidding
        uint256 bidAt
    );

    struct ExchangeWrapper {
        uint256 id;
        address owner;
        uint256 tokenId;
        uint256 kind;
        uint256 weight;
        uint256 createdAt;
    }

    struct CrystalWrapper {
        address owner;
        uint256 tokenId;
        uint256 gene;
        uint256 kind;
        uint256 weight;
    }

    constructor(
        PickaxeIF _pickaxe,
        CrystalBaseIF _crystal,
        ExchangeBaseIF _exchange,
        RandomGeneratorIF _generator,
        address _wallet,
        address _donationWallet,
        uint256 _donationRate
    ) Sellable(_wallet, _donationWallet, _donationRate) public {
        pickaxe = _pickaxe;
        crystal = _crystal;
        exchange = _exchange;
        generator = _generator;
        setEstimatedWeight(0);
    }

    // @dev mineCrystals consists of two basic operations that burn pickaxes and mint crystals.
    // @param _pkxAmount uint256 the amount of tokens to be burned
    function mineCrystals(uint256 _pkxAmount) external onlyEOA {
        address _owner = msg.sender;
        require(pickaxe.balanceOf(msg.sender) >= _pkxAmount);
        require(0 < _pkxAmount && _pkxAmount <= 100);

        uint256 _crystalAmount = _getRandom(5);

        uint256[] memory _tokenIds = new uint256[](_crystalAmount);
        uint256[] memory _kinds = new uint256[](_crystalAmount);
        uint256[] memory _weights = new uint256[](_crystalAmount);
        uint256[] memory _genes = new uint256[](_crystalAmount);

        uint256[] memory _crystalWeightsCumsum = new uint256[](100);
        _crystalWeightsCumsum[0] = crystalWeights[0];
        for(uint256 i = 1; i < 100; i++) {
            _crystalWeightsCumsum[i] = _crystalWeightsCumsum[i - 1].add(crystalWeights[i]);
        }
        uint256 _totalWeight = _crystalWeightsCumsum[_crystalWeightsCumsum.length - 1];
        uint256 _weightRandomSum = 0;
        uint256 _weightSum = 0;

        for(i = 0; i < _crystalAmount; i++) {
            _weights[i] = _getRandom(100);
            _weightRandomSum = _weightRandomSum.add(_weights[i]);
        }

        for(i = 0; i < _crystalAmount; i++) {
            // Kind is decided randomly according to remaining crystal weights.
            // That means crystals of large quantity are chosen with high probability.
            _kinds[i] = _getFirstIndex(_getRandom(_totalWeight), _crystalWeightsCumsum);

            // Weight is decided randomly according to estimatedWeight.
            // EstimatedWeight is fixed (calculated in advance) in one mining.
            // EstimatedWeight is randomly divided into each of weight.
            // That means sum of weights is equal to EstimatedWeight.
            uint256 actualWeight = estimatedWeight.mul(_pkxAmount);
            _weights[i] = _weights[i].mul(actualWeight).div(_weightRandomSum);

            // Gene is decided randomly.
            _genes[i] = _generateGene();

            require(_weights[i] > 0);

            _tokenIds[i] = crystal.mint(_owner, _genes[i], _kinds[i], _weights[i]);

            crystalWeights[_kinds[i]] = crystalWeights[_kinds[i]].sub(_weights[i]);

            _weightSum = _weightSum.add(_weights[i]);
        }

        setEstimatedWeight(_weightSum);
        pickaxe.burn(msg.sender, _pkxAmount);

        emit MineCrystals(
        _owner,
        now,
        _tokenIds,
        _kinds,
        _weights,
        _genes
        );
    }

    // @dev meltCrystals consists of two basic operations.
    //      It burns old crystals and mint new crystal.
    //      The weight of new crystal is the same to total weight of bunred crystals.
    // @notice meltCrystals may have bugs. We will fix later.
    // @param uint256[] _tokenIds the token ids of crystals to be melt
    function meltCrystals(uint256[] _tokenIds) external onlyEOA {
        uint256 _length = _tokenIds.length;
        address _owner = msg.sender;

        require(2 <= _length && _length <= 10);

        uint256[] memory _kinds = new uint256[](_length);
        uint256 _weight;
        uint256 _totalWeight = 0;

        for(uint256 i = 0; i < _length; i++) {
            require(crystal.ownerOf(_tokenIds[i]) == _owner);
            (_kinds[i], _weight) = crystal.getCrystalKindWeight(_tokenIds[i]);
            if (i != 0) {
                require(_kinds[i] == _kinds[i - 1]);
            }

            _totalWeight = _totalWeight.add(_weight);
            crystal.burn(_owner, _tokenIds[i]);
        }

        uint256 _gene = _generateGene();
        uint256 _tokenId = crystal.mint(_owner, _gene, _kinds[0], _totalWeight);

        emit MeltCrystals(_owner, now, _tokenIds, _tokenId, _kinds[0], _totalWeight, _gene);
    }

    // @dev create exchange
    // @param uint256 _tokenId tokenId you want to exchange
    // @param uint256 _kind crystal kind you want to get
    // @param uint256 _weight minimum crystal weight you want to get
    function createExchange(uint256 _tokenId, uint256 _kind, uint256 _weight) external onlyEOA {
        ExchangeWrapper memory _ew = ExchangeWrapper({
            id: 0, // specify after
            owner: msg.sender,
            tokenId: _tokenId,
            kind: _kind,
            weight: _weight,
            createdAt: 0
            });

        CrystalWrapper memory _cw = getCrystalWrapper(msg.sender, _tokenId);

        require(crystal.ownerOf(_tokenId) == _cw.owner);
        require(_kind < 100);

        // escrow crystal to exchange contract
        crystal._transferFrom(_cw.owner, exchange, _tokenId);

        _ew.id = exchange.create(_ew.owner, _tokenId, _cw.gene, _cw.kind, _cw.weight, _ew.kind, _ew.weight, now);

        emit CreateExchange(_ew.id, _ew.owner, _ew.tokenId, _cw.gene, _cw.kind, _cw.weight, _ew.kind, _ew.weight, now);
    }

    function getCrystalWrapper(address _owner, uint256 _tokenId) internal returns(CrystalWrapper) {
        CrystalWrapper memory _cw;
        _cw.owner = _owner;
        _cw.tokenId = _tokenId;
        (_cw.gene, _cw.kind, _cw.weight) = crystal.getCrystalGeneKindWeight(_tokenId);
        return _cw;
    }

    // @dev cancel exchange
    // @param uint256 _id exchangeId you want to cancel
    function cancelExchange(uint256 _id) external onlyEOA {
        require(exchange.ownerOf(_id) == msg.sender);

        uint256 _tokenId = exchange.getTokenId(_id);

        CrystalWrapper memory _cw = getCrystalWrapper(msg.sender, _tokenId);

        // withdraw crystal from exchange contract
        crystal._transferFrom(exchange, _cw.owner, _cw.tokenId);

        exchange.remove(_id);

        emit CancelExchange(_id, _cw.owner, _cw.tokenId, _cw.kind, _cw.weight, now);
    }

    // @dev bid exchange
    // @param uint256 _exchangeId exchange id you want to bid
    // @param uint256 _tokenId token id of your crystal to be exchanged
    function bidExchange(uint256 _exchangeId, uint256 _tokenId) external onlyEOA {
        // exchange
        ExchangeWrapper memory _ew;
        _ew.id = _exchangeId;
        (_ew.owner, _ew.tokenId, _ew.kind, _ew.weight, _ew.createdAt) = exchange.getExchange(_ew.id); // check existence

        // crystal of exchanger
        CrystalWrapper memory _cwe = getCrystalWrapper(msg.sender, _tokenId);

        // crystal of creator of exchange
        CrystalWrapper memory _cwo = getCrystalWrapper(_ew.owner, _ew.tokenId);

        require(_cwe.owner != _ew.owner);
        require(_cwe.kind == _ew.kind);
        require(_cwe.weight >= _ew.weight);

        // transfer my crystal to owner of exchange
        crystal._transferFrom(_cwe.owner, _ew.owner, _cwe.tokenId);

        // transfer escrowed crystal to me.
        crystal._transferFrom(exchange, _cwe.owner, _ew.tokenId);

        exchange.remove(_ew.id);

        emit BidExchange(_ew.id, _ew.owner, _ew.tokenId, _cwo.gene, _cwo.kind, _cwo.weight, _cwe.owner, _cwe.tokenId, _cwe.kind, _cwe.weight, now);
    }

    // @dev get index when cumsum[i] exceeds _in first.
    // @param uint256 _min
    // @param uint256[] _sorted array is required to be sorted by ascending order
    function _getFirstIndex(uint256 _min, uint256[] _sorted) public pure returns(uint256) {
        for(uint256 i = 0; i < _sorted.length; i++) {
            if(_min < _sorted[i]) {
                return i;
            }
        }
        return _sorted.length - 1;
    }

    function _transferFromOwner(address _to, uint256 _value) internal {
        pickaxe.transferFromOwner(_to, _value);
    }

    function _generateGene() internal returns(uint256) {
        return _getRandom(~uint256(0));
    }

    function _getRandom(uint256 _max) public returns(uint256){
        bytes32 hash = keccak256(generator.generate());
        uint256 number = (uint256(hash) % _max) + 1;
        //emit RandomGenerated(number);
        return number;
    }

    // @dev change random generator
    // @param RandomGeneratorIF randomGenerator contract address
    function setRandomGenerator(RandomGeneratorIF _generator) external onlyOwner {
        generator = _generator;
    }
}

    Contract ABI  
[{"constant":false,"inputs":[{"name":"_beneficiary","type":"address"}],"name":"buyPickaxes","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"donationRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_initialBlockNumber","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"},{"name":"_secondsPerBlock","type":"uint256"}],"name":"_getBlockIndexAtYear","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_totalWeight","type":"uint256"},{"name":"_yearIndex","type":"uint256"}],"name":"_getWeightUntil","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_min","type":"uint256"},{"name":"_sorted","type":"uint256[]"}],"name":"_getFirstIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerYear","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":"blockNumberUpdated","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"currentWeight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"estimatedWeight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"},{"name":"_initialBlockNumber","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"},{"name":"_totalWeight","type":"uint256"}],"name":"_estimateSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"originalTotalWeight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_generator","type":"address"}],"name":"setRandomGenerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"},{"name":"_initialBlockNumber","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"}],"name":"_getYearIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_id","type":"uint256"}],"name":"cancelExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerDay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_tokenId","type":"uint256"},{"name":"_kind","type":"uint256"},{"name":"_weight","type":"uint256"}],"name":"createExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"secondsPerBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"generator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_donationWallet","type":"address"}],"name":"setEthereumWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"}],"name":"_getBlocksPerYear","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"_tokenIds","type":"uint256[]"}],"name":"meltCrystals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"crystal","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"_initialBlockNumber","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"}],"name":"_getBlockIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"},{"name":"_blockNumberUpdated","type":"uint256"}],"name":"_updateNeeded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"},{"name":"_initialBlockNumber","type":"uint256"},{"name":"_currentBlockNumber","type":"uint256"},{"name":"_totalWeight","type":"uint256"},{"name":"_currentWeight","type":"uint256"}],"name":"_estimateWeight","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"_secondsPerBlock","type":"uint256"}],"name":"_getWaitingBlocks","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"initialBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_pkxAmount","type":"uint256"}],"name":"mineCrystals","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"exchange","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_exchangeId","type":"uint256"},{"name":"_tokenId","type":"uint256"}],"name":"bidExchange","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_max","type":"uint256"}],"name":"_getRandom","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getCrystalWeights","outputs":[{"name":"","type":"uint256[100]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_wallet","type":"address"}],"name":"setWallet","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"donationWallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MIN_WEI_AMOUNT","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"pickaxe","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_pickaxe","type":"address"},{"name":"_crystal","type":"address"},{"name":"_exchange","type":"address"},{"name":"_generator","type":"address"},{"name":"_wallet","type":"address"},{"name":"_donationWallet","type":"address"},{"name":"_donationRate","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"minedAt","type":"uint256"},{"indexed":false,"name":"tokenIds","type":"uint256[]"},{"indexed":false,"name":"kinds","type":"uint256[]"},{"indexed":false,"name":"weights","type":"uint256[]"},{"indexed":false,"name":"genes","type":"uint256[]"}],"name":"MineCrystals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"meltedAt","type":"uint256"},{"indexed":false,"name":"meltedTokenIds","type":"uint256[]"},{"indexed":false,"name":"tokenId","type":"uint256"},{"indexed":false,"name":"kind","type":"uint256"},{"indexed":false,"name":"weight","type":"uint256"},{"indexed":false,"name":"gene","type":"uint256"}],"name":"MeltCrystals","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"ownerTokenId","type":"uint256"},{"indexed":false,"name":"ownerTokenGene","type":"uint256"},{"indexed":false,"name":"ownerTokenKind","type":"uint256"},{"indexed":false,"name":"ownerTokenWeight","type":"uint256"},{"indexed":false,"name":"kind","type":"uint256"},{"indexed":false,"name":"weight","type":"uint256"},{"indexed":false,"name":"createdAt","type":"uint256"}],"name":"CreateExchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"ownerTokenId","type":"uint256"},{"indexed":false,"name":"ownerTokenKind","type":"uint256"},{"indexed":false,"name":"ownerTokenWeight","type":"uint256"},{"indexed":false,"name":"cancelledAt","type":"uint256"}],"name":"CancelExchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"id","type":"uint256"},{"indexed":false,"name":"owner","type":"address"},{"indexed":false,"name":"ownerTokenId","type":"uint256"},{"indexed":false,"name":"ownerTokenGene","type":"uint256"},{"indexed":false,"name":"ownerTokenKind","type":"uint256"},{"indexed":false,"name":"ownerTokenWeight","type":"uint256"},{"indexed":false,"name":"exchanger","type":"address"},{"indexed":false,"name":"exchangerTokenId","type":"uint256"},{"indexed":false,"name":"exchangerTokenKind","type":"uint256"},{"indexed":false,"name":"exchangerTokenWeight","type":"uint256"},{"indexed":false,"name":"bidAt","type":"uint256"}],"name":"BidExchange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"weight","type":"uint256"},{"indexed":false,"name":"nextUpdateBlockNumber","type":"uint256"}],"name":"UpdateEstimatedWeight","type":"event"},{"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"}],"name":"TokenPurchase","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"deposit","type":"uint256"}],"name":"ForwardFunds","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"sender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Donation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"}]

  Contract Creation Code Switch To Opcodes View
6080604052610c8060405190810160405280640ba43b740065ffffffffffff1681526020016434ce555c0065ffffffffffff1681526020016501319718a50065ffffffffffff1681526020016407558bdb0065ffffffffffff1681526020016436e890398065ffffffffffff16815260200164233438e80065ffffffffffff16815260200164988cf6980065ffffffffffff16815260200164c1220d870065ffffffffffff1681526020016401abd388e765ffffffffffff16815260200164b17c9ee70065ffffffffffff168152602001649f6556fe0065ffffffffffff168152602001649d70a92a0065ffffffffffff16815260200164012c3dfa4265ffffffffffff1681526020016407298a93de65ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016401319718a565ffffffffffff1681526020016407558bdb0065ffffffffffff16815260200164012c684c0065ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016402632e314a65ffffffffffff16815260200164012b7a796e65ffffffffffff168152602001640177825f0065ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016401ca62a4f765ffffffffffff168152602001640394c549ef65ffffffffffff1681526020016410229a150065ffffffffffff1681526020016402632e314a65ffffffffffff168152602001647f5eb88e8065ffffffffffff168152602001640394c549ef65ffffffffffff1681526020016404c65c629465ffffffffffff168152602001640394c549ef65ffffffffffff168152602001640394c549ef65ffffffffffff1681526020016404c65c629465ffffffffffff168152602001640394c549ef65ffffffffffff1681526020016401ca62a4f765ffffffffffff1681526020016423cfb4e35665ffffffffffff16815260200164157c9fbb9a65ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016410b643590665ffffffffffff168152602001641319718a5065ffffffffffff168152602001643baf82d03a65ffffffffffff1681526020016501424d5bfe0665ffffffffffff16815260200164befe6f672065ffffffffffff16815260200164ad1694f57565ffffffffffff168152602001646b6f1eaa0265ffffffffffff16815260200164834eec96e665ffffffffffff168152602001647d56f91bad65ffffffffffff16815260200164538f50bd1e65ffffffffffff168152602001643baf82d03a65ffffffffffff16815260200164538f50bd1e65ffffffffffff1681526020016417dfcdece465ffffffffffff16815260200164479f69c6ac65ffffffffffff168152602001643baf82d03a65ffffffffffff168152602001640befe6f67265ffffffffffff16815260200164098cb8c52865ffffffffffff16815260200164479f69c6ac65ffffffffffff16815260200164479f69c6ac65ffffffffffff168152602001637a3c704265ffffffffffff16815260200163d5e9c47365ffffffffffff1681526020016398cb8c5265ffffffffffff1681526020016401319718a565ffffffffffff168152602001645d1c09824665ffffffffffff168152602001648f3ed38d5865ffffffffffff16815260200164834eec96e665ffffffffffff168152602001646b6f1eaa0265ffffffffffff16815260200164538f50bd1e65ffffffffffff16815260200164a71ea17a3c65ffffffffffff16815260200164098cb8c52865ffffffffffff16815260200164098cb8c52865ffffffffffff168152602001637a3c704265ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff168152602001640befe6f67265ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016407298a93de65ffffffffffff16815260200164098cb8c52865ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016417dfcdece465ffffffffffff168152602001642fbf9bd9c865ffffffffffff168152602001642fbf9bd9c865ffffffffffff168152602001648191fc1d0065ffffffffffff16815260200164990a220d0065ffffffffffff16815260200164098cb8c52865ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016407298a93de65ffffffffffff1681526020016417dfcdece465ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016404c65c629465ffffffffffff1681526020016404c65c629465ffffffffffff168152602001641319718a5065ffffffffffff1681525060059060646200078b9291906200102a565b50600c60695543606a556000606b556000606c556000606d55348015620007b157600080fd5b5060405160e08062004c6c83398101806040528101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050828282336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c860028190555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060048190555050505086606e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085606f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084607060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083607160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a07600062000a14640100000000026401000000009004565b50505050505050620010a1565b60008062000a3c83606b5462000aec6401000000000262003899179091906401000000009004565b606b8190555043915062000a6560695483606d5462000b0b640100000000026401000000009004565b9050801562000ae75762000a98606954606a548465befe6f672000606b5462000b4f640100000000026401000000009004565b606c8190555081606d819055507fb9a2ce1061b71fbf2ee90bb8feed7941f9d6f8b6fe67bce1822774c5fc9844af606c5483604051808381526020018281526020019250505060405180910390a15b505050565b600080828401905083811015151562000b0157fe5b8091505092915050565b600080600083141562000b22576001915062000b47565b62000b3c8562000c4a640100000000026401000000009004565b905080830184101591505b509392505050565b600080600080600062000b748a8a8a8a62000c79640100000000026401000000009004565b935062000b928a8a8a62000dae640100000000026401000000009004565b92508260020a915061271090508386111562000c175762000c0f8262000bf28862000bd5858962000e1a6401000000000262003547179091906401000000009004565b62000e596401000000000262003582179091906401000000009004565b62000e596401000000000262003582179091906401000000009004565b945062000c3d565b62000c3a828262000e596401000000000262003582179091906401000000009004565b94505b5050505095945050505050565b600062000c72826201518062000e596401000000000262003582179091906401000000009004565b9050919050565b600080600080600080600062000ca08b8b8b62000dae640100000000026401000000009004565b9550600162000cc08b8b8e62000e75640100000000026401000000009004565b01945062000d088562000ceb8d8b62000e1a6401000000000262003547179091906401000000009004565b62000e1a6401000000000262003547179091906401000000009004565b93506001860160020a925062000d3a6301e133808462000e1a6401000000000262003547179091906401000000009004565b915062000d9b62000d5b898862000f3d640100000000026401000000009004565b62000d7e848762000e596401000000000262003582179091906401000000009004565b62000aec6401000000000262003899179091906401000000009004565b9050809650505050505050949350505050565b600080600062000dce858562000fa3640100000000026401000000009004565b915062000dea8662000fe0640100000000026401000000009004565b905062000e0f818362000e596401000000000262003582179091906401000000009004565b925050509392505050565b600080600084141562000e31576000915062000e52565b828402905082848281151562000e4357fe5b0414151562000e4e57fe5b8091505b5092915050565b600080828481151562000e6857fe5b0490508091505092915050565b600080600085851015151562000e8a57600080fd5b62000ead8686620010106401000000000262003880179091906401000000009004565b915062000ec98462000fe0640100000000026401000000009004565b905062000f3262000f148262000ef7848662000e596401000000000262003582179091906401000000009004565b62000e1a6401000000000262003547179091906401000000009004565b83620010106401000000000262003880179091906401000000009004565b925050509392505050565b6000806000809150600090505b8381101562000f985762000f886001820160020a8681151562000f6957fe5b048362000aec6401000000000262003899179091906401000000009004565b9150808060010191505062000f4a565b819250505092915050565b600082821015151562000fb557600080fd5b62000fd88383620010106401000000000262003880179091906401000000009004565b905092915050565b600062001009826301e1338062000e596401000000000262003582179091906401000000009004565b9050919050565b60008282111515156200101f57fe5b818303905092915050565b826064810192821562001066579160200282015b8281111562001065578251829065ffffffffffff169055916020019190600101906200103e565b5b50905062001075919062001079565b5090565b6200109e91905b808211156200109a57600081600090555060010162001080565b5090565b90565b613bbb80620010b16000396000f3006080604052600436106101ee576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff168063032946141461020f5780630d38ffcd1461024557806313c1629c1461027057806314c65687146102c557806314c72e9e14610310578063252e40b1146103945780632c4e722e146103bf57806330b5198f146103ea57806332b85a4414610415578063473533e6146104405780634786cfea1461046b57806349716f5a146104ca5780634bc19fee146104f5578063521eb273146105385780635cb603dd1461058f5780635d3d08a8146105e457806363809953146106115780637909da6f1461063c5780637a7d49371461067d5780637afa1eed146106a8578063815a4876146106ff57806384cb4fec14610742578063889087b1146107835780638da5cb5b146107be578063971a9091146108155780639a6846581461086c578063aa36b52e146108b7578063aa41d60514610910578063b348036914610979578063b3ae65d7146109ba578063c67415f3146109e5578063d2f7265a14610a12578063d3e212c514610a69578063dd1e4e1114610aa0578063ddfa3a6014610ae1578063deaa59df14610b34578063e7b94df414610b77578063e95f206e14610bce578063f2fde38b14610bf9578063fa922e6614610c3c575b6611c37937e08000341015151561020457600080fd5b61020d33610c93565b005b610243600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c93565b005b34801561025157600080fd5b5061025a610da0565b6040518082815260200191505060405180910390f35b34801561027c57600080fd5b506102af600480360381019080803590602001909291908035906020019092919080359060200190929190505050610da6565b6040518082815260200191505060405180910390f35b3480156102d157600080fd5b506102fa6004803603810190808035906020019092919080359060200190929190505050610e1c565b6040518082815260200191505060405180910390f35b34801561031c57600080fd5b5061037e6004803603810190808035906020019092919080359060200190820180359060200190808060200260200160405190810160405280939291908181526020018383602002808284378201915050505050509192919290505050610e6f565b6040518082815260200191505060405180910390f35b3480156103a057600080fd5b506103a9610ec3565b6040518082815260200191505060405180910390f35b3480156103cb57600080fd5b506103d4610ecb565b6040518082815260200191505060405180910390f35b3480156103f657600080fd5b506103ff610ed1565b6040518082815260200191505060405180910390f35b34801561042157600080fd5b5061042a610ed7565b6040518082815260200191505060405180910390f35b34801561044c57600080fd5b50610455610edd565b6040518082815260200191505060405180910390f35b34801561047757600080fd5b506104b460048036038101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050610ee3565b6040518082815260200191505060405180910390f35b3480156104d657600080fd5b506104df610f95565b6040518082815260200191505060405180910390f35b34801561050157600080fd5b50610536600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f9f565b005b34801561054457600080fd5b5061054d61103e565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561059b57600080fd5b506105ce600480360381019080803590602001909291908035906020019092919080359060200190929190505050611064565b6040518082815260200191505060405180910390f35b3480156105f057600080fd5b5061060f6004803603810190808035906020019092919050505061109e565b005b34801561061d57600080fd5b50610626611519565b6040518082815260200191505060405180910390f35b34801561064857600080fd5b5061067b600480360381019080803590602001909291908035906020019092919080359060200190929190505050611520565b005b34801561068957600080fd5b506106926119fc565b6040518082815260200191505060405180910390f35b3480156106b457600080fd5b506106bd611a02565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561070b57600080fd5b50610740600480360381019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a28565b005b34801561074e57600080fd5b5061076d60048036038101908080359060200190929190505050611ac7565b6040518082815260200191505060405180910390f35b34801561078f57600080fd5b506107bc600480360381019080803590602001908201803590602001919091929391929390505050611ae7565b005b3480156107ca57600080fd5b506107d36120d5565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561082157600080fd5b5061082a6120fa565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561087857600080fd5b506108a16004803603810190808035906020019092919080359060200190929190505050612120565b6040518082815260200191505060405180910390f35b3480156108c357600080fd5b506108f660048036038101908080359060200190929190803590602001909291908035906020019092919050505061214c565b604051808215151515815260200191505060405180910390f35b34801561091c57600080fd5b50610963600480360381019080803590602001909291908035906020019092919080359060200190929190803590602001909291908035906020019092919050505061217d565b6040518082815260200191505060405180910390f35b34801561098557600080fd5b506109a460048036038101908080359060200190929190505050612214565b6040518082815260200191505060405180910390f35b3480156109c657600080fd5b506109cf612233565b6040518082815260200191505060405180910390f35b3480156109f157600080fd5b50610a1060048036038101908080359060200190929190505050612239565b005b348015610a1e57600080fd5b50610a27612b3c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a7557600080fd5b50610a9e6004803603810190808035906020019092919080359060200190929190505050612b62565b005b348015610aac57600080fd5b50610acb60048036038101908080359060200190929190505050613186565b6040518082815260200191505060405180910390f35b348015610aed57600080fd5b50610af66132b1565b6040518082606460200280838360005b83811015610b21578082015181840152602081019050610b06565b5050505090500191505060405180910390f35b348015610b4057600080fd5b50610b75600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132fc565b005b348015610b8357600080fd5b50610b8c61339b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bda57600080fd5b50610be36133c1565b6040518082815260200191505060405180910390f35b348015610c0557600080fd5b50610c3a600480360381019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506133cc565b005b348015610c4857600080fd5b50610c51613521565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6000806611c37937e080003410151515610cac57600080fd5b349150610cde670de0b6b3a7640000610cd06002548561354790919063ffffffff16565b61358290919063ffffffff16565b905081610d10600254610d02670de0b6b3a76400008561354790919063ffffffff16565b61358290919063ffffffff16565b141515610d1c57600080fd5b610d26338261359d565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f623b3804fa71d67900d064613da8f94b9617215ee90799290593e1745087ad188484604051808381526020018281526020019250505060405180910390a3610d9b61367e565b505050565b60045481565b6000806000858510151515610dba57600080fd5b610dcd868661388090919063ffffffff16565b9150610dd884611ac7565b9050610e11610e0282610df4848661358290919063ffffffff16565b61354790919063ffffffff16565b8361388090919063ffffffff16565b925050509392505050565b6000806000809150600090505b83811015610e6457610e556001820160020a86811515610e4557fe5b048361389990919063ffffffff16565b91508080600101915050610e29565b819250505092915050565b600080600090505b8251811015610eb4578281815181101515610e8e57fe5b90602001906020020151841015610ea757809150610ebc565b8080600101915050610e77565b600183510391505b5092915050565b6301e1338081565b60025481565b606d5481565b606b5481565b606c5481565b6000806000806000806000610ef98b8b8b611064565b95506001610f088b8b8e610da6565b019450610f3085610f228d8b61354790919063ffffffff16565b61354790919063ffffffff16565b93506001860160020a9250610f526301e133808461354790919063ffffffff16565b9150610f82610f618988610e1c565b610f74848761358290919063ffffffff16565b61389990919063ffffffff16565b9050809650505050505050949350505050565b65befe6f67200081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515610ffa57600080fd5b80607160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060006110738585612120565b915061107e86611ac7565b9050611093818361358290919063ffffffff16565b925050509392505050565b60006110a8613ad8565b6110b1336138b7565b1515156110bd57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff16607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e856040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561116557600080fd5b505af1158015611179573d6000803e3d6000fd5b505050506040513d602081101561118f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156111c257600080fd5b607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314ff5ea3846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561125357600080fd5b505af1158015611267573d6000803e3d6000fd5b505050506040513d602081101561127d57600080fd5b8101908080519060200190929190505050915061129a33836138ca565b9050606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb712535607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836000015184602001516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156113bf57600080fd5b505af11580156113d3573d6000803e3d6000fd5b50505050607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cc82215846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561146857600080fd5b505af115801561147c573d6000803e3d6000fd5b50505050827fd4d8d3838d177b895f32762da601506feae7134f9f3e3a286d256f79d40c3972826000015183602001518460600151856080015142604051808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019550505050505060405180910390a2505050565b6201518081565b611528613b1e565b611530613ad8565b611539336138b7565b15151561154557600080fd5b60c060405190810160405280600081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020016000815250915061159733866138ca565b9050806000015173ffffffffffffffffffffffffffffffffffffffff16606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b15801561164557600080fd5b505af1158015611659573d6000803e3d6000fd5b505050506040513d602081101561166f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415156116a257600080fd5b6064841015156116b157600080fd5b606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb7125358260000151607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b1580156117d057600080fd5b505af11580156117e4573d6000803e3d6000fd5b50505050607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166352638d7583602001518784604001518560600151866080015188606001518960800151426040518963ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200188815260200187815260200186815260200185815260200184815260200183815260200182815260200198505050505050505050602060405180830381600087803b1580156118f557600080fd5b505af1158015611909573d6000803e3d6000fd5b505050506040513d602081101561191f57600080fd5b810190808051906020019092919050505082600001818152505081600001517fb18c9515006d8d9e31fb76eddb92e53ba7e8ec9e6d683e5fcab1e18ec4bb98e4836020015184604001518460400151856060015186608001518860600151896080015142604051808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390a25050505050565b60695481565b607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141515611a8357600080fd5b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611ae0826301e1338061358290919063ffffffff16565b9050919050565b60008060606000806000806000611afd336138b7565b151515611b0957600080fd5b89899050975033965087600211158015611b245750600a8811155b1515611b2f57600080fd5b87604051908082528060200260200182016040528015611b5e5781602001602082028038833980820191505090505b50955060009350600092505b87831015611ef1578673ffffffffffffffffffffffffffffffffffffffff16606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e8c8c878181101515611bd557fe5b905060200201356040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050602060405180830381600087803b158015611c2e57600080fd5b505af1158015611c42573d6000803e3d6000fd5b505050506040513d6020811015611c5857600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff16141515611c8b57600080fd5b606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af62a7088b8b868181101515611cd757fe5b905060200201356040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808281526020019150506040805180830381600087803b158015611d2f57600080fd5b505af1158015611d43573d6000803e3d6000fd5b505050506040513d6040811015611d5957600080fd5b8101908080519060200190929190805190602001909291905050508785815181101515611d8257fe5b906020019060200201819750828152505050600083141515611dde578560018403815181101515611daf57fe5b906020019060200201518684815181101515611dc757fe5b90602001906020020151141515611ddd57600080fd5b5b611df1858561389990919063ffffffff16565b9350606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac888c8c878181101515611e4057fe5b905060200201356040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b158015611ecc57600080fd5b505af1158015611ee0573d6000803e3d6000fd5b505050508280600101935050611b6a565b611ef9613a21565b9150606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a647e8ec8884896000815181101515611f4a57fe5b90602001906020020151886040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050602060405180830381600087803b158015611fe857600080fd5b505af1158015611ffc573d6000803e3d6000fd5b505050506040513d602081101561201257600080fd5b81019080805190602001909291905050509050428773ffffffffffffffffffffffffffffffffffffffff167f9a2f4e8b8b46a06a6a22027ad11ae098be40d52fb6263f7c0baf02c4e1bc17a08c8c858b600081518110151561207057fe5b906020019060200201518a8960405180806020018681526020018581526020018481526020018381526020018281038252888882818152602001925060200280828437820191505097505050505050505060405180910390a350505050505050505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600082821015151561213157600080fd5b612144838361388090919063ffffffff16565b905092915050565b60008060008314156121615760019150612175565b61216a85612214565b905080830184101591505b509392505050565b60008060008060006121918a8a8a8a610ee3565b935061219e8a8a8a611064565b92508260020a91506127109050838611156121f1576121ea826121dc886121ce858961354790919063ffffffff16565b61358290919063ffffffff16565b61358290919063ffffffff16565b9450612207565b612204828261358290919063ffffffff16565b94505b5050505095945050505050565b600061222c826201518061358290919063ffffffff16565b9050919050565b606a5481565b60008060608060608060606000806000806000612255336138b7565b15151561226157600080fd5b339b508c606e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561232257600080fd5b505af1158015612336573d6000803e3d6000fd5b505050506040513d602081101561234c57600080fd5b81019080805190602001909291905050501015151561236a57600080fd5b8c600010801561237b575060648d11155b151561238657600080fd5b6123906005613186565b9a508a6040519080825280602002602001820160405280156123c15781602001602082028038833980820191505090505b5099508a6040519080825280602002602001820160405280156123f35781602001602082028038833980820191505090505b5098508a6040519080825280602002602001820160405280156124255781602001602082028038833980820191505090505b5097508a6040519080825280602002602001820160405280156124575781602001602082028038833980820191505090505b509650606460405190808252806020026020018201604052801561248a5781602001602082028038833980820191505090505b5095506005600060648110151561249d57fe5b01548660008151811015156124ae57fe5b9060200190602002018181525050600194505b6064851015612530576125076005866064811015156124dc57fe5b015487600188038151811015156124ef57fe5b9060200190602002015161389990919063ffffffff16565b868681518110151561251557fe5b906020019060200201818152505084806001019550506124c1565b85600187510381518110151561254257fe5b9060200190602002015193506000925060009150600094505b8a8510156125c25761256d6064613186565b888681518110151561257b57fe5b90602001906020020181815250506125b3888681518110151561259a57fe5b906020019060200201518461389990919063ffffffff16565b9250848060010195505061255b565b600094505b8a8510156128dc576125e16125db85613186565b87610e6f565b89868151811015156125ef57fe5b90602001906020020181815250506126128d606c5461354790919063ffffffff16565b905061265083612642838b8981518110151561262a57fe5b9060200190602002015161354790919063ffffffff16565b61358290919063ffffffff16565b888681518110151561265e57fe5b9060200190602002018181525050612674613a21565b878681518110151561268257fe5b9060200190602002018181525050600088868151811015156126a057fe5b906020019060200201511115156126b657600080fd5b606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a647e8ec8d898881518110151561270357fe5b906020019060200201518c8981518110151561271b57fe5b906020019060200201518c8a81518110151561273357fe5b906020019060200201516040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001848152602001838152602001828152602001945050505050602060405180830381600087803b1580156127d057600080fd5b505af11580156127e4573d6000803e3d6000fd5b505050506040513d60208110156127fa57600080fd5b81019080805190602001909291905050508a8681518110151561281957fe5b9060200190602002018181525050612878888681518110151561283857fe5b9060200190602002015160058b8881518110151561285257fe5b9060200190602002015160648110151561286857fe5b015461388090919063ffffffff16565b60058a8781518110151561288857fe5b9060200190602002015160648110151561289e57fe5b01819055506128cd88868151811015156128b457fe5b906020019060200201518361389990919063ffffffff16565b915084806001019550506125c7565b6128e582613a33565b606e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639dc29fac338f6040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b1580156129aa57600080fd5b505af11580156129be573d6000803e3d6000fd5b50505050428c73ffffffffffffffffffffffffffffffffffffffff167f23c59a8ab07b391d91ac8ab3319ad5e959ded915308b151c7ca552c56e8b35a38c8c8c8c6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b83811015612a4e578082015181840152602081019050612a33565b50505050905001858103845288818151815260200191508051906020019060200280838360005b83811015612a90578082015181840152602081019050612a75565b50505050905001858103835287818151815260200191508051906020019060200280838360005b83811015612ad2578082015181840152602081019050612ab7565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015612b14578082015181840152602081019050612af9565b505050509050019850505050505050505060405180910390a350505050505050505050505050565b607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612b6a613b1e565b612b72613ad8565b612b7a613ad8565b612b83336138b7565b151515612b8f57600080fd5b84836000018181525050607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630b9d584784600001516040518263ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018082815260200191505060a060405180830381600087803b158015612c2e57600080fd5b505af1158015612c42573d6000803e3d6000fd5b505050506040513d60a0811015612c5857600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291905050508760200188604001896060018a6080018b60a001858152508581525085815250858152508573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505050505050612cf433856138ca565b9150612d08836020015184604001516138ca565b9050826020015173ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614151515612d4d57600080fd5b82606001518260600151141515612d6357600080fd5b8260800151826080015110151515612d7a57600080fd5b606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb7125358360000151856020015185602001516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612e7f57600080fd5b505af1158015612e93573d6000803e3d6000fd5b50505050606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cb712535607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846000015186604001516040518463ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050600060405180830381600087803b158015612fba57600080fd5b505af1158015612fce573d6000803e3d6000fd5b50505050607060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634cc8221584600001516040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050600060405180830381600087803b15801561306757600080fd5b505af115801561307b573d6000803e3d6000fd5b5050505082600001517f5514510acd7becd44fa4def480d977880b8c94af90a31acbd616949850f15d5684602001518560400151846040015185606001518660800151886000015189602001518a606001518b6080015142604051808b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018a81526020018981526020018881526020018781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018581526020018481526020018381526020018281526020019a505050505050505050505060405180910390a25050505050565b6000806000607160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a1bbc346040518163ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401602060405180830381600087803b15801561321157600080fd5b505af1158015613225573d6000803e3d6000fd5b505050506040513d602081101561323b57600080fd5b8101908080519060200190929190505050604051808267ffffffffffffffff1667ffffffffffffffff1678010000000000000000000000000000000000000000000000000281526008019150506040518091039020915060018483600190048115156132a357fe5b060190508092505050919050565b6132b9613b6b565b60056064806020026040519081016040528092919082606480156132f2576020028201915b8154815260200190600101908083116132de575b5050505050905090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561335757600080fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6611c37937e0800081565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614151561342757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561346357600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b606e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080600084141561355c576000915061357b565b828402905082848281151561356d57fe5b0414151561357757fe5b8091505b5092915050565b600080828481151561359057fe5b0490508091505092915050565b606e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630f18ac0783836040518363ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561366257600080fd5b505af1158015613676573d6000803e3d6000fd5b505050505050565b60008060006136986004543461358290919063ffffffff16565b92508234039150600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015613707573d6000803e3d6000fd5b507ff56ba0f53476ddecea8bd2db761e216b2386c1f4c7b53e8667ca6586ac77a6df338385604051808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828152602001935050505060405180910390a1671bf32a5451a300009050803073ffffffffffffffffffffffffffffffffffffffff163110151561387b57600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561380e573d6000803e3d6000fd5b507f5d8bc849764969eb1bcc6d0a2f55999d0167c1ccec240a4f39cf664ca9c4148e3382604051808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a15b505050565b600082821115151561388e57fe5b818303905092915050565b60008082840190508381101515156138ad57fe5b8091505092915050565b600080823b905060008111915050919050565b6138d2613ad8565b6138da613ad8565b83816000019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505082816020018181525050606f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638c3b6f0e846040518263ffffffff167c010000000000000000000000000000000000000000000000000000000002815260040180828152602001915050606060405180830381600087803b1580156139ad57600080fd5b505af11580156139c1573d6000803e3d6000fd5b505050506040513d60608110156139d757600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050508360400184606001856080018381525083815250838152505050508091505092915050565b6000613a2e600019613186565b905090565b600080613a4b83606b5461389990919063ffffffff16565b606b81905550439150613a6360695483606d5461214c565b90508015613ad357613a84606954606a548465befe6f672000606b5461217d565b606c8190555081606d819055507fb9a2ce1061b71fbf2ee90bb8feed7941f9d6f8b6fe67bce1822774c5fc9844af606c5483604051808381526020018281526020019250505060405180910390a15b505050565b60a060405190810160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b60c06040519081016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600081526020016000815260200160008152602001600081525090565b610c80604051908101604052806064906020820280388339808201915050905050905600a165627a7a72305820459e86dc3ddcfbb169995058294fa47fed86bd909aaa082d9f46f3c6b7e881da00290000000000000000000000005116c1d70e3a2cf55a2502d05f1bc17a0518782e000000000000000000000000cfbc9103362aec4ce3089f155c2da2eea1cb7602000000000000000000000000b6e928db347dbaad2c06868b716a2cf488904574000000000000000000000000045f11fc6fbed29b73119f4d51570c7e64af75f30000000000000000000000007b37faf831044d08da0c0e7419e2e31615f43032000000000000000000000000fb6916095ca1df60bb79ce92ce3ea74c37c5d3590000000000000000000000000000000000000000000000000000000000000032

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

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000005116c1d70e3a2cf55a2502d05f1bc17a0518782e
Arg [1] : 000000000000000000000000cfbc9103362aec4ce3089f155c2da2eea1cb7602
Arg [2] : 000000000000000000000000b6e928db347dbaad2c06868b716a2cf488904574
Arg [3] : 000000000000000000000000045f11fc6fbed29b73119f4d51570c7e64af75f3
Arg [4] : 0000000000000000000000007b37faf831044d08da0c0e7419e2e31615f43032
Arg [5] : 000000000000000000000000fb6916095ca1df60bb79ce92ce3ea74c37c5d359
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000032


   Swarm Source:
bzzr://459e86dc3ddcfbb169995058294fa47fed86bd909aaa082d9f46f3c6b7e881da

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.