Contract Overview
Balance: 0.2242 Ether
Ether Value: $18.62 (@ $83.05/ETH)
Transactions: 4550 txns
 Latest 25 transactions from a total of 4550 transactions
(+1 PendingTxn)

TxHash Age From To Value [TxFee]
0xe92ab95a5b3d7044b0605212560d97466e5b1e7366d94797b839b298cc8cc7fd(pending)0xb0eef5d733306e4a78ee3d12023c019326dec8dd  IN  0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether(Pending)
0x871f03f648c307ddd253868660cf699afff7707763de46ea5f597692636154fc17 mins ago0x35008b61ebfaa083c5d4b33ed500d1ca18ddf5f4  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.0033152925
0x53afb63d95e968dc5621890c6760d9a1b3340f15f090d92c313f92de9052a99a25 mins ago0x35008b61ebfaa083c5d4b33ed500d1ca18ddf5f4  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00186723
0x3309a699f8082c810692fe997775a83abccd20243c9b7d15942eab2e987dd9a219 hrs 38 mins ago0x1433c27dc3cb0567aa84ea17bfb48509a42b171b  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.004098716
0x608107380fe744be4d5d02155c25f940a7f32344acb85680bb3b6c2be7107b4719 hrs 38 mins ago0xe621b5e73fb3213e7eb3c27dd60d337d2d07e1e3  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.005228548
0x96340c80e8e89a291f66b8a92c47bb7704032d7602cba45498620cdce52c32431 day 2 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.003009213
0x11562af1f36c5befa605e70b05b7a35b64b2fe0e44f5989240939f57e548e77d1 day 3 hrs ago0xa374a95b8246cc6d9c5bb660a913571be8c2d8aa  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00218418
0xe686a3cc2e81b834b3b36d045ceabc6274375223307a08430ca359ba32a21d3e1 day 4 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.008056745
0x6b1b9666f16c4f15d563d77b67fdb5cc87e5ded2388f9a88fbd9fbac8260cfaf1 day 4 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.002127275
0xa46e24b71ef42e665523fa9eb8ff41166302036eba178dc7e5119e3cd52866991 day 4 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.005097115
0xc1b51ce715d6e09053fce8b9fddbd036832e3356ebaf05e5330494ffc5eb28dd1 day 5 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00508109
0x662d82e6917b0c248963b6890e6b88d5bea6acd5c2bef935b208cff8ccb0100b1 day 5 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00358701
0x46d07c0bc632fb3a62b3ec77f37c6294b3d2e799ad1a434a15f2cbb4119507461 day 5 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.004830543
0xb75b0c8a460b2d260c851d8f5813fa19af5405e83cad15d258e6827a5ce325ab1 day 6 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.002147715
0xabdb100b5afa9200a08e8fa805cc4a0b48f4fd7fb61aa88916f09291b2abacbc1 day 6 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.008056015
0x9e7e15719586733be249bb8a6eedeef8c791a7ad7c1d3ca7db36e7a5abb06e0f1 day 6 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.00366439
0xb929c40e66346d6fb0179b6e5f2f84080e692929c5444c33c2de1d9addcf00691 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.005071565
0x6c01d6d5d51ff4b8ccf765038412561c339c7e22ac7cc998e294dc57a61e5a481 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006573645
0x4cc8ad99bc32cc8a4ef5045f506443f02da5b940a07d127282a8a391a5e953e71 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006592625
0x9a35fbfd0888fc533c54a91ad745850f778d5c501f4243cd894c2866b9d788451 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.009098595
0x2840fd35bf7f82206ed3664e65e61d6add05454d73409a3ee0780151d99e0bfe1 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.006521004
0x43de8e3ca6681584430897f4c6d4c87cb56fbeca00d5ddaf0a6edb42b5514d6b1 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.008013642
0x12e12bfe3d72c19f0e091f4768f1a41f963d757bfa30f87b2c6bec17c0ed858f1 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.014485059
0xdc427dceb6e30c0ff00cfb63c687812bf1e47fb58f4875930fecb6eb3cbac3d91 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.011977101
0x512394aa39b5840c8deec80a341490df6dd7cbfe4bfd409a5152d35782e14db51 day 10 hrs ago0x6e82597b1ee5efee295c3425da062e238a68d5bd  IN   0xcec76159cb10f8c110e738809e4ee4b71f1de12e0 Ether0.009120933
[ 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
0x5ae573a3a752c22a9258fb663ea82ac2a76d3c5377b7c94837fd5ab7e60fd08f68581335 days 11 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0xd704cfd7f6386ccf72c2badc098b78254c543e312c2656ec9d6fa2a520402a5668358069 days 4 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x19da5ff0acae5bc72eee41c88622ffa1a060bc9b786c8fd9729bfd278ebb4eee681383712 days 19 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xf410061e58fe925474c7f92c7d4afe93986d51f834f3dd83193298f25bdb51db679606415 days 17 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xa4c71a672c7b5a878bdda01da909efcdddd4d86b78e5245213fdca3bae56e9c3678657217 days 7 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x34fb568ac092b4cd4564878a66dc8af9af2c962b15e239f96ffddf33842a69a4677612319 days 1 hr ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x60906fc99481b7859b11d8a700f45f5b00d25809530add134910d379d4177abb676712920 days 12 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.049 Ether
0x4c93bd018cde2f4c21d3c1bcda98a2ca31506c85c4b2c021091870a070c61e9a676566120 days 18 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x3680019ee505f6eef8a5943a212b2fefea2cec02aa1bf304363d385fca6feff1675689622 days 4 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x9b80279f1c41d90a4461e6600a91ac9d17c8c5548d258fd41c899ce694a82f26674597023 days 23 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x694e7e82be8b21e245854fbdb6406205baa41d18be7800ccdbfd9df2992156e7674576824 days 12 mins ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0xab378c6b20862c2b39be9109f920f06c155dd1b4feeac43fda4bf8960737386a673246126 days 4 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0441 Ether
0x93a01cc715d1c31b8a32c7f6531b797e536c95590f9d7d9504f483a41152dcc5673040026 days 13 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0098 Ether
0x7d4465062970a8edbe04b4efeccb595b30b385841a5769d7e867fa8c799de913672567227 days 7 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x1af8f3037bac28ebfc6826c67fa6302b40add176782c0ebb6671f9c69fdb8d78672458527 days 11 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0xf542c5f315a2ed85b205d96b45ea1e122a4aeb33fa8698bea70c332ceb299e7d672381927 days 14 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0196 Ether
0x80cc6d1ed86ca4483c94175537415b36cdbc9397d9e6909cd1bc473898a538f7671836628 days 12 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xc907c30703af6ae8cae1d99a7bed4789b8488b58e928bdbcacfecd8f4d2766cd670375630 days 21 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x87fe1232b9b4932d365db33545d80ed8ddca728e2786551052bc94d6093d6e7b668992833 days 3 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xc6bdbe6079b26ebc793eee267f727f885c695fb571f089e0d3507ac7cb1fd198668566733 days 20 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x340c4c79d69bfe8a0ba09b8eb2c4b21108c8e55f7424bfec0e92e090d85dde4f667816135 days 2 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x0b9721a9ef2f55029bc9b86a245beffd8d5d77f2bbeab27888f25f7c4563e7a4667813035 days 2 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0xf8bbce10e59bd805e5690afd681c5d299c7cecba44241a7a137b084917c57ceb666027238 days 17 mins ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0049 Ether
0x895ebdcafea798b6cb99bea3e6a363eb21fc3c4342da1e15d553e76f2e7f4f8e665174539 days 10 hrs ago0xcec76159cb10f8c110e738809e4ee4b71f1de12e0x7b37faf831044d08da0c0e7419e2e31615f430320.0245 Ether
0x91b32fafecb656e656de847ddfdd7639ea9ae0588a824efaf926152ab8f8c2e2665157539 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.