Latest 25 transactions from a total of 2813 transactions

TxHash Age From To Value [TxFee]
0x6c4f42c60ba22857aff784e17f59ac127e3504518c3e0860f6bbb367ead0c221 33 secs ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x6bd5df669650edd5fb8318f162eecba53677dba7b5442815ac04b3cf6b5ee6585 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167025
0x24ceb158264239a9e941cafd5c7c08d016185be70d7ccebae308e8edb4fe64a88 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002505375
0x211bd2d46a26c5c2c1f766ef655c18ad8076aad67b97aada52e5f72e836fea0615 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002506335
0xed66af8f15167ea0a36de0b85d9ca6c626fe877612aea1c166af2503fdaeb82819 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002505375
0x2a6fe124b1882f9c0847543bcdcc286ecea06b4ffd36e538e8a3b6a319f288ce23 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002506335
0x8c253a1b662b3e488626411deb17de43a1d863374332b26bcb376070f473e68126 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x2fc6356d3fc975960c6493190416bbf477e394596a1f86980cdcdd5f9461aed830 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xb71ec150e967fa60925a95ed88188401a329984706a9c51bc1904c474ffb54c434 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xa255fa494131437d265ffdb69a92ee3f72b951abb4ecfcbd92966f1fb2ce89ff37 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x20cbfa2f31b6a66991de963fe7166730948f378a3a455e0d393c5d16cda95d2342 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002506335
0x0e4a7827486559159606271d4aff9c37345915adbfbf3432f6f73a2f7d6f82ac45 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167025
0x04bc49055480eb301753b13532e4e83877d73aba2407e53abb3d95703abd609148 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x5771361f62e07496de2ce3fa16a39d455e2cb2755ad0ed196f1e67085ef4bde154 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167025
0xdf0a0dc246ccadf3b1a501917f316f81251c8bf145ce35ef90aa71dc6497373157 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x36547fea2381cb6e75f8d3a5788b0cce8ffe86d8aba1d4375ab0b0f2bdffc15d1 hr 1 min ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0x46397afdf76e643bb3311c8bbb14d7d05b6cb62015219c1686a34a2531167c041 hr 4 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xbdd9a84347f9ec2b4dfddd48c7506a07c4074a99d8778e7eb1841a1278eaae5d1 hr 9 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167025
0xa15124a732ed04bbb241ed7e7a89916b6428c6b0f63cbeaecabb5e7adc047b0c1 hr 13 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xbb784234bb1c0f24fe287f4ca5da79e9f77f04452676c92a3672191cc2fc1e0d1 hr 17 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xd6e2ba218617a3fc7fcef2362b1bafb914d54cb51e7b5f52629959bf224e95491 hr 21 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
0xfe7683cab105a76cb1f1aebeeba40b8123e1ef838549e8ba65aa57de9bf614861 hr 27 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167025
0xd7bdaa79f8e244f68bcffbcca292a414cd4b5adb1e1a5e7047ce9f1ea06b48c61 hr 31 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002506335
0xfcde81b8f5de986fac4bb50e54b76b0fb14496c3bcd14f6a03d49ade886839301 hr 35 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.0002505375
0x679fae392c19a1d318afdbe089911ad331018353da2fd1b48a4e68bc5ac4c95d1 hr 39 mins ago0x72dcc3cf050dda45bfe3da608de044e5b47316d8  IN   0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether0.000167089
[ 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
0xa72c816e4e28e33f51a9d1defdfbbf1441495f3e64e71bd1be12e1c3f419f8b3505381119 hrs 43 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.000038816 Ether
0xa72c816e4e28e33f51a9d1defdfbbf1441495f3e64e71bd1be12e1c3f419f8b3505381119 hrs 43 mins ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x932a04f7c65a828fbb755a3d40d3c3c21edeb543f4f6eb839d94c5673ae0e3e650468011 day 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.0037785934 Ether
0x932a04f7c65a828fbb755a3d40d3c3c21edeb543f4f6eb839d94c5673ae0e3e650468011 day 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x203ae4ecf42df55f3399669a6d1f8f7cb8eba96ee4b715d9007b513b6409577950271404 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.0008497696 Ether
0x203ae4ecf42df55f3399669a6d1f8f7cb8eba96ee4b715d9007b513b6409577950271404 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0xfbf97dc054025ba7f2096a684434a94fee7081ebdb90117dac0cd9db57f9b61050261114 days 23 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xae0af4e49f7e065abe5339194086ad6e0e9925bb0.02 Ether
0x4a4f236e0b62bd1cf48ef04bdeb3fd50662543c92da6e9eb407e93b20fbe6cd050259505 days 7 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x4a4f236e0b62bd1cf48ef04bdeb3fd50662543c92da6e9eb407e93b20fbe6cd050259505 days 7 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x4a4f236e0b62bd1cf48ef04bdeb3fd50662543c92da6e9eb407e93b20fbe6cd050259505 days 7 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x1578293d5f60209c9ed3f3b73d38884f67a5866de78b22ade4661a36284c5f7c50259115 days 15 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x1578293d5f60209c9ed3f3b73d38884f67a5866de78b22ade4661a36284c5f7c50259115 days 15 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x1578293d5f60209c9ed3f3b73d38884f67a5866de78b22ade4661a36284c5f7c50259115 days 15 mins ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0xf3d85d9b953f30dfcc62280931bc5deaa8173ea61bab3a9f0ccc8dda212c38c350204335 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.000777722 Ether
0xf3d85d9b953f30dfcc62280931bc5deaa8173ea61bab3a9f0ccc8dda212c38c350204335 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0xe24d42b84ebd91f2d8ce46cda52a8066e826b150bd6c697acf756b0744022df850142496 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.00034173148 Ether
0xe24d42b84ebd91f2d8ce46cda52a8066e826b150bd6c697acf756b0744022df850142496 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0xd4f646dd9d492198e52c6a4fffb51dfcc272b7d1c58ff6de06a2c112e64c888550076827 days 19 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xa17be7adf897f5fbfcea3c7851859833a5bd4ef40.00021284106 Ether
0xd4f646dd9d492198e52c6a4fffb51dfcc272b7d1c58ff6de06a2c112e64c888550076827 days 19 hrs ago0xa17be7adf897f5fbfcea3c7851859833a5bd4ef40xd5727f9d8c5b9e4472566683f4e562ef9b47dce30 Ether
0x6cb4631385ee4d29cff9b88107daf4f3977f84fa8f8e85be1d8a39ed43f8e19f50049098 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x6cb4631385ee4d29cff9b88107daf4f3977f84fa8f8e85be1d8a39ed43f8e19f50049098 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x6cb4631385ee4d29cff9b88107daf4f3977f84fa8f8e85be1d8a39ed43f8e19f50049098 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30x1df65ad4e59391116c5b155723682ea0cec68a860 Ether
0x6cf1b3dce54ce23c14a63d382411a41bd06e88f6af00b862654398d43988786a50047698 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x6cf1b3dce54ce23c14a63d382411a41bd06e88f6af00b862654398d43988786a50047698 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
0x6cf1b3dce54ce23c14a63d382411a41bd06e88f6af00b862654398d43988786a50047698 days 6 hrs ago0xd5727f9d8c5b9e4472566683f4e562ef9b47dce30xaa7127e250e87476fdd253f15e86a4ea9c4c4bd40 Ether
[ Download CSV Export  ] 
Contract Source Code Verified (Exact Match)
Contract Name: Custodian
Compiler Version: v0.5.3+commit.10d17f24
Optimization Enabled: Yes
Runs (Optimiser):  200



  Contract Source Code   Find Similiar Contracts

pragma solidity 0.5.3;

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/external/Token.sol

/*
  Abstract contract for the full ERC 20 Token standard
  https://github.com/ethereum/EIPs/issues/20
*/
contract Token {
  /* This is a slight change to the ERC20 base standard.
  function totalSupply() view returns (uint supply);
  is replaced map:
  uint public totalSupply;
  This automatically creates a getter function for the totalSupply.
  This is moved to the base contract since public getter functions are not
  currently recognised as an implementation of the matching abstract
  function by the compiler.
  */
  /// total amount of tokens
  uint public totalSupply;

  /// @param _owner The address from which the balance will be retrieved
  /// @return The balance
  function balanceOf(address _owner) public view returns (uint balance);

  /// @notice send `_value` token to `_to` from `msg.sender`
  /// @param _to The address of the recipient
  /// @param _value The amount of token to be transferred
  /// @return Whether the transfer was successful or not
  function transfer(address _to, uint _value) public returns (bool success);

  /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from`
  /// @param _from The address of the sender
  /// @param _to The address of the recipient
  /// @param _value The amount of token to be transferred
  /// @return Whether the transfer was successful or not
  function transferFrom(address _from, address _to, uint _value) public returns (bool success);

  /// @notice `msg.sender` approves `_spender` to spend `_value` tokens
  /// @param _spender The address of the account able to transfer the tokens
  /// @param _value The amount of tokens to be approved for transfer
  /// @return Whether the approval was successful or not
  function approve(address _spender, uint _value) public returns (bool success);

  /// @param _owner The address of the account owning tokens
  /// @param _spender The address of the account able to transfer the tokens
  /// @return Amount of remaining tokens allowed to spent
  function allowance(address _owner, address _spender) public view returns (uint remaining);

  event Transfer(address indexed _from, address indexed _to, uint _value);
  event Approval(address indexed _owner, address indexed _spender, uint _value);
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/external/MerkleProof.sol

// note: can use a deployed https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/cryptography/MerkleProof.sol
contract MerkleProof {

  /*
   * Verifies the inclusion of a leaf in a Merkle tree using a Merkle proof.
   *
   * Based on https://github.com/ameensol/merkle-tree-solidity/src/MerkleProof.sol
   */
  function checkProof(bytes memory proof, bytes32 root, bytes32 leaf) public pure returns (bool) {
    if (proof.length % 32 != 0) return false; // Check if proof is made of bytes32 slices

    bytes memory elements = proof;
    bytes32 element;
    bytes32 hash = leaf;
    for (uint i = 32; i <= proof.length; i += 32) {
      assembly {
      // Load the current element of the proofOfInclusion (optimal way to get a bytes32 slice)
        element := mload(add(elements, i))
      }
      hash = keccak256(abi.encodePacked(hash < element ? abi.encodePacked(hash, element) : abi.encodePacked(element, hash)));
    }
    return hash == root;
  }

  // from StorJ -- https://github.com/nginnever/storj-audit-verifier/contracts/MerkleVerifyv3.sol
  function checkProofOrdered(bytes memory proof, bytes32 root, bytes32 leaf, uint index) public pure returns (bool) {
    if (proof.length % 32 != 0) return false; // Check if proof is made of bytes32 slices

    // use the index to determine the node ordering (index ranges 1 to n)
    bytes32 element;
    bytes32 hash = leaf;
    uint remaining;
    for (uint j = 32; j <= proof.length; j += 32) {
      assembly {
        element := mload(add(proof, j))
      }

      // calculate remaining elements in proof
      remaining = (proof.length - j + 32) / 32;

      // we don't assume that the tree is padded to a power of 2
      // if the index is odd then the proof will start with a hash at a higher layer,
      // so we have to adjust the index to be the index at that layer
      while (remaining > 0 && index % 2 == 1 && index > 2 ** remaining) {
        index = uint(index) / 2 + 1;
      }

      if (index % 2 == 0) {
        hash = keccak256(abi.encodePacked(abi.encodePacked(element, hash)));
        index = index / 2;
      } else {
        hash = keccak256(abi.encodePacked(abi.encodePacked(hash, element)));
        index = uint(index) / 2 + 1;
      }
    }
    return hash == root;
  }

  /** Verifies the inclusion of a leaf in a Merkle tree using a Merkle proof */
  function verifyIncluded(bytes memory proof, bytes32 root, bytes32 leaf) public pure returns (bool) {
    return checkProof(proof, root, leaf);
  }

  /** Verifies the inclusion of a leaf is at a specific place in an ordered Merkle tree using a Merkle proof */
  function verifyIncludedAtIndex(bytes memory proof, bytes32 root, bytes32 leaf, uint index) public pure returns (bool) {
    return checkProofOrdered(proof, root, leaf, index);
  }
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Stoppable.sol

/* using a master switch, allowing to permanently turn-off functionality */
contract Stoppable {

  /************************************ abstract **********************************/
  modifier onlyOwner { _; }
  /********************************************************************************/

  bool public isOn = true;

  modifier whenOn() { require(isOn, "must be on"); _; }
  modifier whenOff() { require(!isOn, "must be off"); _; }

  function switchOff() external onlyOwner {
    if (isOn) {
      isOn = false;
      emit Off();
    }
  }
  event Off();
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Validating.sol

contract Validating {

  modifier notZero(uint number) { require(number != 0, "invalid 0 value"); _; }
  modifier notEmpty(string memory text) { require(bytes(text).length != 0, "invalid empty string"); _; }
  modifier validAddress(address value) { require(value != address(0x0), "invalid address");  _; }

}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/HasOwners.sol

contract HasOwners is Validating {

  mapping(address => bool) public isOwner;
  address[] private owners;

  constructor(address[] memory _owners) public {
    for (uint i = 0; i < _owners.length; i++) _addOwner_(_owners[i]);
    owners = _owners;
  }

  modifier onlyOwner { require(isOwner[msg.sender], "invalid sender; must be owner"); _; }

  function getOwners() public view returns (address[] memory) { return owners; }

  function addOwner(address owner) external onlyOwner {  _addOwner_(owner); }

  function _addOwner_(address owner) private validAddress(owner) {
    if (!isOwner[owner]) {
      isOwner[owner] = true;
      owners.push(owner);
      emit OwnerAdded(owner);
    }
  }
  event OwnerAdded(address indexed owner);

  function removeOwner(address owner) external onlyOwner {
    if (isOwner[owner]) {
      require(owners.length > 1, "removing the last owner is not allowed");
      isOwner[owner] = false;
      for (uint i = 0; i < owners.length - 1; i++) {
        if (owners[i] == owner) {
          owners[i] = owners[owners.length - 1]; // replace map last entry
          delete owners[owners.length - 1];
          break;
        }
      }
      owners.length -= 1;
      emit OwnerRemoved(owner);
    }
  }
  event OwnerRemoved(address indexed owner);
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/Versioned.sol

contract Versioned {
  string public version;

  constructor(string memory _version) public {
    version = _version;
  }

}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/custodian/Ledger.sol

contract Ledger {

  function extractEntry(address[] memory addresses, uint[] memory uints) internal view returns (Entry memory result) {
    addresses[0] = address(this);  /* ledgerId */
    result.account = addresses[1];
    result.asset = addresses[2];
    result.entryType = EntryType(uints[0]);
    result.action = uints[1];
    result.timestamp = uints[2];
    result.id = uints[3];
    result.quantity = uints[4];
    result.balance = uints[5];
    result.previous = uints[6];
    result.addresses = addresses;
    result.uints = uints;
    result.hash = calculateEvmConstrainedHash(result.entryType, addresses, uints);
  }

  /**
   * the Evm has a limit of psuedo 16 local variables (including parameters and return parameters).
   * on exceeding this constraint, the Solidity compiler will bail out map:
   *    'Error: Stack too deep, try removing local variables'
   * so ... we opt to calculate the hash in chunks
   */
  function calculateEvmConstrainedHash(EntryType entryType, address[] memory addresses, uint[] memory uints) internal view returns (bytes32) {
    bytes32 entryHash = calculateEntryHash(addresses, uints);
    bytes32 witnessHash = calculateWitnessHash(entryType, addresses, uints);
    return keccak256(abi.encodePacked(abi.encodePacked(entryHash, witnessHash)));
  }
  function calculateEntryHash(address[] memory addresses, uint[] memory uints) private pure returns (bytes32) {
    return keccak256(abi.encodePacked(
        addresses[0],
        addresses[1],
        addresses[2],
        uints[0],
        uints[1],
        uints[2],
        uints[3],
        uints[4],
        uints[5],
        uints[6]
      ));
  }
  function calculateWitnessHash(EntryType entryType, address[] memory addresses, uint[] memory uints) private view returns (bytes32) {
    if (entryType == EntryType.Deposit) return calculateDepositInfoWitnessHash(uints);
    if (entryType == EntryType.Withdrawal) return calculateWithdrawalRequestWitnessHash(addresses, uints);
    if (entryType == EntryType.Trade || entryType == EntryType.Fee) return calculateMatchWitnessHash(addresses, uints);
    return keccak256(abi.encodePacked(abi.encodePacked(uint(0))));
  }
  function calculateDepositInfoWitnessHash(uint[] memory uints) private view returns (bytes32) {
    return keccak256(abi.encodePacked(
        uints[offsets.uints.witness + 0],
        uints[offsets.uints.witness + 1]
      ));
  }
  function calculateWithdrawalRequestWitnessHash(address[] memory addresses, uint[] memory uints) private view returns (bytes32) {
    return keccak256(abi.encodePacked(
        addresses[offsets.addresses.witness + 0],
        addresses[offsets.addresses.witness + 1],
        uints[offsets.uints.witness + 0],
        uints[offsets.uints.witness + 1]
      ));
  }
  function calculateMatchWitnessHash(address[] memory addresses, uint[] memory uints) private view returns (bytes32) {
    return keccak256(abi.encodePacked(
        calculateFillHash(addresses, uints, offsets.addresses.witness, offsets.uints.witness),    // fill
        calculateOrderHash(addresses, uints, offsets.addresses.maker, offsets.uints.maker), // maker
        calculateOrderHash(addresses, uints, offsets.addresses.taker, offsets.uints.taker)  // taker
      ));
  }
  function calculateFillHash(address[] memory addresses, uint[] memory uints, uint8 addressesOffset, uint8 uintsOffset) private pure returns (bytes32) {
    return keccak256(abi.encodePacked(
        addresses[addressesOffset + 0],
        uints[uintsOffset + 0],
        uints[uintsOffset + 1],
        uints[uintsOffset + 2]
      ));
  }
  function calculateOrderHash(address[] memory addresses, uint[] memory uints, uint8 addressesOffset, uint8 uintsOffset) private pure returns (bytes32) {
    return keccak256(abi.encodePacked(
        addresses[addressesOffset + 0],
        addresses[addressesOffset + 1],
        uints[uintsOffset + 0],
        uints[uintsOffset + 1],
        uints[uintsOffset + 2],
        uints[uintsOffset + 3],
        uints[uintsOffset + 4],
        uints[uintsOffset + 5],
        uints[uintsOffset + 6]
      ));
  }

  Offsets private offsets = getOffsets();
  function getOffsets() private pure returns (Offsets memory) {
    uint8 addressesInEntry = 3;
    uint8 uintsInEntry = 7;
    uint8 addressesInFill = 1;
    uint8 uintsInFill = 3;
    uint8 addressesInOrder = 2;
    uint8 uintsInOrder = 7;
    uint8 addressesInDeposit = 3;
    uint8 uintsInDeposit = 3;
    return Offsets({
      addresses: OffsetKind({
        deposit: addressesInDeposit,
        witness: addressesInEntry,
        maker: addressesInEntry + addressesInFill,
        taker: addressesInEntry + addressesInFill + addressesInOrder
        }),
      uints: OffsetKind({
        deposit: uintsInDeposit,
        witness: uintsInEntry,
        maker: uintsInEntry + uintsInFill,
        taker: uintsInEntry + uintsInFill + uintsInOrder
        })
      });
  }
  struct OffsetKind { uint8 deposit; uint8 witness; uint8 maker; uint8 taker; }
  struct Offsets { OffsetKind addresses; OffsetKind uints; }


  enum EntryType { Unknown, Origin, Deposit, Withdrawal, Exited, Trade, Fee }

  struct Entry {
    EntryType entryType;
    uint action;
    uint timestamp;
    uint id;
    address account;
    address asset;
    uint quantity;
    uint balance;
    uint previous;
    address[] addresses;
    uint[] uints;
    bytes32 hash;
  }

  struct DepositCommitmentRecord {
    address account;
    address asset;
    uint quantity;
    uint nonce;
    uint designatedGblock;
    bytes32 hash;
  }


/***********************************************************************************************************************
for future fraud-proofs

  function getDepositWitness(Entry memory entry) internal view returns (DepositInfo memory result) {
    require(entry.entryType == EntryType.Deposit, "entry must be of type Deposit");
    result.nonce = entry.uints[offsets.uints.witness + 1];
    result.designatedGblock = entry.uints[offsets.uints.witness + 1];
  }

  function getWithdrawalRequestWitness(Entry memory entry) internal view returns (WithdrawalRequest memory result) {
    require(entry.entryType == EntryType.Withdrawal, "entry must be of type Withdrawal");
    result.account = entry.addresses[offsets.addresses.witness + 0];
    result.asset = entry.addresses[offsets.addresses.witness + 1];
    result.quantity = entry.uints[offsets.uints.witness + 0];
    result.originatorTimestamp = entry.uints[offsets.uints.witness + 1];
  }

  function getMatchWitness(Entry memory entry) internal view returns (Match memory match_) {
    require(entry.entryType == EntryType.Trade || entry.entryType == EntryType.Fee, "entry must of type Trade or Fee");
    match_.fill = getFill(entry, offsets.addresses.witness, offsets.uints.witness);
    match_.maker = getOrder(entry, offsets.addresses.maker, offsets.uints.maker);
    match_.taker = getOrder(entry, offsets.addresses.taker, offsets.uints.taker);
  }

  function getFill(Entry memory entry, uint8 addressesOffset, uint8 uintsOffset) private pure returns (Fill memory result) {
    result.token = entry.addresses[addressesOffset + 0];
    result.timestamp = entry.uints[uintsOffset + 0];
    result.quantity = entry.uints[uintsOffset + 1];
    result.price = entry.uints[uintsOffset + 2];
  }

  function getOrder(Entry memory entry, uint8 addressesOffset, uint8 uintsOffset) private pure returns (Order memory result) {
    result.account = entry.addresses[addressesOffset + 0];
    result.token = entry.addresses[addressesOffset + 1];
    result.originatorTimestamp = entry.uints[uintsOffset + 0];
    result.orderType = entry.uints[uintsOffset + 1];
    result.side = entry.uints[uintsOffset + 2];
    result.quantity = entry.uints[uintsOffset + 3];
    result.price = entry.uints[uintsOffset + 4];
    result.operatorTimestamp = entry.uints[uintsOffset + 5];
    result.filled = entry.uints[uintsOffset + 6];
  }


  struct DepositInfo {
    uint nonce;
    uint designatedGblock;
  }

  struct WithdrawalRequest {
    address account;
    address asset;
    uint quantity;
    uint originatorTimestamp;
  }

  struct Match { Fill fill; Order maker; Order taker; }

  struct Fill {
    uint timestamp;
    address token;
    uint quantity;
    uint price;
  }

  struct Order {
    uint originatorTimestamp;
    uint orderType;
    address account;
    address token;
    uint side;
    uint quantity;
    uint price;
    uint operatorTimestamp;
    uint filled;
  }
***********************************************************************************************************************/
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/custodian/Depositing.sol

interface Depositing {

  function depositEther() external payable;

  function depositToken(address token, uint quantity) external;

  function reclaimDeposit(
    address[] calldata addresses,
    uint[] calldata uints,
    bytes32[] calldata leaves,
    uint[] calldata indexes,
    bytes calldata predecessor,
    bytes calldata successor
  ) external;
}

// File: /private/var/folders/2q/x2n3s2rx0d16552ynj1lx90r0000gn/T/tmp.DXCt2XeP/gluon-plasma/packages/on-chain/contracts/custodian/Withdrawing.sol

interface Withdrawing {

  function withdraw(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;

  function claimExit(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;

  function exit(bytes32 entryHash, bytes calldata proof, bytes32 root) external;

  function exitOnHalt(address[] calldata addresses, uint[] calldata uints, bytes calldata signature, bytes calldata proof, bytes32 root) external;
}

// File: contracts/custodian/Custodian.sol

contract Custodian is Stoppable, HasOwners, MerkleProof, Ledger, Depositing, Withdrawing, Versioned {

  address public constant ETH = address(0x0);
  uint public constant confirmationDelay = 5;
  uint public constant visibilityDelay = 3;
  uint public nonceGenerator = 0;

  address public operator;
  address public registry;

  constructor(address[] memory _owners, address _registry, address _operator, uint _submissionInterval, string memory _version)
    HasOwners(_owners)
    Versioned(_version)
    public validAddress(_registry) validAddress(_operator)
  {
    operator = _operator;
    registry = _registry;
    submissionInterval = _submissionInterval;
  }

  // note: can move to a library
  function transfer(uint quantity, address asset, address account) internal {
    asset == ETH ?
      require(address(uint160(account)).send(quantity), "failed to transfer ether") : // explicit casting to `address payable`
      require(Token(asset).transfer(account, quantity), "failed to transfer token");
  }

  /**
   * @dev Recover signer address from a message by using their signature
   * @param hash bytes32 message, the hash is the signed message. What is recovered is the signer address.
   * @param signature bytes generated using web3.eth.account.sign().signature
   *
   * Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
   * TODO: Remove this library once solidity supports passing a signature to ecrecover.
   * See https://github.com/ethereum/solidity/issues/864
   */
  // note: can move to a library
  // note: can use a deployed https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/cryptography/ECDSA.sol
  function recover(bytes32 hash, bytes memory signature) private pure returns (address) {
    bytes32 r; bytes32 s; uint8 v;
    if (signature.length != 65) return (address(0)); //Check the signature length

    // Divide the signature into r, s and v variables
    assembly {
      r := mload(add(signature, 32))
      s := mload(add(signature, 64))
      v := byte(0, mload(add(signature, 96)))
    }

    // Version of signature should be 27 or 28, but 0 and 1 are also possible versions
    if (v < 27) v += 27;

    // If the version is correct return the signer address
    return (v != 27 && v != 28) ? (address(0)) : ecrecover(hash, v, r, s);
  }

  function verifySignedBy(bytes32 hash, bytes memory signature, address signer) internal pure {
    require(recover(hash, signature) == signer, "failed to verify signature");
  }

  /**************************************************** Depositing ****************************************************/

  mapping (bytes32 => bool) public deposits;

  modifier validToken(address value) { require(value != ETH, "value must be a valid ERC20 token address"); _; }

  function () external payable { deposit(msg.sender, ETH, msg.value); }
  function depositEther() external payable { deposit(msg.sender, ETH, msg.value); }

  // note: an account must call token.approve(custodian, quantity) beforehand
  function depositToken(address token, uint quantity) external validToken(token) {
    uint balanceBefore = Token(token).balanceOf(address(this));
    require(Token(token).transferFrom(msg.sender, address(this), quantity), "failure to transfer quantity from token");
    uint balanceAfter = Token(token).balanceOf(address(this));
    require(balanceAfter - balanceBefore == quantity, "bad Token; transferFrom erroneously reported of successful transfer");
    deposit(msg.sender, token, quantity);
  }

  function deposit(address account, address asset, uint quantity) private whenOn {
    uint nonce = ++nonceGenerator;
    uint designatedGblock = currentGblockNumber + visibilityDelay;
    DepositCommitmentRecord memory record = toDepositCommitmentRecord(account, asset, quantity, nonce, designatedGblock);
    deposits[record.hash] = true;
    emit Deposited(address(this), account, asset, quantity, nonce, designatedGblock);
  }

  function reclaimDeposit(
    address[] calldata addresses,
    uint[] calldata uints,
    bytes32[] calldata leaves,
    uint[] calldata indexes,
    bytes calldata predecessor,
    bytes calldata successor
  ) external {
    ProofOfExclusionOfDeposit memory proof = extractProofOfExclusionOfDeposit(addresses, uints, leaves, indexes, predecessor, successor);
    DepositCommitmentRecord memory record = proof.excluded;
    require(record.account == msg.sender, "claimant must be the original depositor");
    require(currentGblockNumber > record.designatedGblock && record.designatedGblock != 0, "designated gblock is unconfirmed or unknown");

    Gblock memory designatedGblock = gblocksByNumber[record.designatedGblock];
    require(proveIsExcludedFromDeposits(designatedGblock.depositsRoot, proof), "failed to proof exclusion of deposit");

    _reclaimDeposit_(record);
  }

  function proveIsExcludedFromDeposits(bytes32 root, ProofOfExclusionOfDeposit memory proof) private pure returns (bool) {
    return
      proof.successor.index == proof.predecessor.index + 1 && // predecessor & successor must be consecutive
      verifyIncludedAtIndex(proof.predecessor.proof, root, proof.predecessor.leaf, proof.predecessor.index) &&
      verifyIncludedAtIndex(proof.successor.proof, root, proof.successor.leaf, proof.successor.index);
  }

  function reclaimDepositOnHalt(address asset, uint quantity, uint nonce, uint designatedGblock) external whenOff {
    DepositCommitmentRecord memory record = toDepositCommitmentRecord(msg.sender, asset, quantity, nonce, designatedGblock);
    require(record.designatedGblock >= currentGblockNumber, "designated gblock is already confirmed; use exitOnHalt instead");
    _reclaimDeposit_(record);
  }

  function _reclaimDeposit_(DepositCommitmentRecord memory record) private {
    require(deposits[record.hash], "unknown deposit");
    delete deposits[record.hash];
    transfer(record.quantity, record.asset, record.account);
    emit DepositReclaimed(address(this), record.account, record.asset, record.quantity, record.nonce);
  }

  function extractProofOfExclusionOfDeposit(
    address[] memory addresses,
    uint[] memory uints,
    bytes32[] memory leaves,
    uint[] memory indexes,
    bytes memory predecessor,
    bytes memory successor
  ) private view returns (ProofOfExclusionOfDeposit memory result) {
    result.excluded = extractDepositCommitmentRecord(addresses, uints);
    result.predecessor = ProofOfInclusionAtIndex(leaves[0], indexes[0], predecessor);
    result.successor = ProofOfInclusionAtIndex(leaves[1], indexes[1], successor);
  }

  function extractDepositCommitmentRecord(address[] memory addresses, uint[] memory uints) private view returns (DepositCommitmentRecord memory) {
    return toDepositCommitmentRecord(
      addresses[1],
      addresses[2],
      uints[0],
      uints[1],
      uints[2]
    );
  }

  function toDepositCommitmentRecord(
    address account,
    address asset,
    uint quantity,
    uint nonce,
    uint designatedGblock
  ) private view returns (DepositCommitmentRecord memory result) {
    result.account = account;
    result.asset = asset;
    result.quantity = quantity;
    result.nonce = nonce;
    result.designatedGblock = designatedGblock;
    result.hash = keccak256(abi.encodePacked(
      address(this),
      account,
      asset,
      quantity,
      nonce,
      designatedGblock
    ));
  }

  event Deposited(address indexed custodian, address indexed account, address indexed asset, uint quantity, uint nonce, uint designatedGblock);
  event DepositReclaimed(address indexed custodian, address indexed account, address indexed asset, uint quantity, uint nonce);

  struct ProofOfInclusionAtIndex { bytes32 leaf; uint index; bytes proof; }
  struct ProofOfExclusionOfDeposit { DepositCommitmentRecord excluded; ProofOfInclusionAtIndex predecessor; ProofOfInclusionAtIndex successor; }

  /**************************************************** Withdrawing ***************************************************/

  mapping (bytes32 => bool) public withdrawn;
  mapping (bytes32 => ExitClaim) private exitClaims;
  mapping (address => mapping (address => bool)) public exited; // account => asset => did-exit

  function withdraw(
    address[] calldata addresses,
    uint[] calldata uints,
    bytes calldata signature,
    bytes calldata proof,
    bytes32 root
  ) external {
    Entry memory entry = extractEntry(addresses, uints);
    verifySignedBy(entry.hash, signature, operator);
    require(entry.account == msg.sender, "withdrawer must be entry's account");
    require(entry.entryType == EntryType.Withdrawal, "entry must be of type Withdrawal");
    require(proveInConfirmedWithdrawals(proof, root, entry.hash), "invalid entry proof");
    require(!withdrawn[entry.hash], "entry already withdrawn");
    withdrawn[entry.hash] = true;
    transfer(entry.quantity, entry.asset, entry.account);
    emit Withdrawn(entry.hash, entry.account, entry.asset, entry.quantity);
  }

  function claimExit(
    address[] calldata addresses,
    uint[] calldata uints,
    bytes calldata signature,
    bytes calldata proof,
    bytes32 root
  ) external whenOn {
    Entry memory entry = extractEntry(addresses, uints);
    verifySignedBy(entry.hash, signature, operator);
    require(entry.account == msg.sender, "claimant must be entry's account");
    require(!hasExited(entry.account, entry.asset), "previously exited");
    require(proveInConfirmedBalances(proof, root, entry.hash), "invalid balance proof");

    uint confirmationThreshold = currentGblockNumber + confirmationDelay;
    exitClaims[entry.hash] = ExitClaim(entry, confirmationThreshold);
    emit ExitClaimed(entry.hash, entry.account, entry.asset, entry.balance, entry.timestamp, confirmationThreshold);
  }

  function exit(bytes32 entryHash, bytes calldata proof, bytes32 root) external whenOn {
    ExitClaim memory claim = exitClaims[entryHash];
    require(canExit(entryHash), "no prior claim found to withdraw OR balances are yet to be confirmed");
    require(proveInUnconfirmedBalances(proof, root, entryHash), "invalid balance proof");
    delete exitClaims[entryHash];
    _exit_(claim.entry);
  }

  function exitOnHalt(
    address[] calldata addresses,
    uint[] calldata uints,
    bytes calldata signature,
    bytes calldata proof,
    bytes32 root
  ) external whenOff {
    Entry memory entry = extractEntry(addresses, uints);
    verifySignedBy(entry.hash, signature, operator);
    require(entry.account == msg.sender, "claimant must be entry's account");
    require(proveInConfirmedBalances(proof, root, entry.hash), "invalid balance proof");
    _exit_(entry);
  }

  function _exit_(Entry memory entry) private {
    require(!hasExited(entry.account, entry.asset), "previously exited");
    exited[entry.account][entry.asset] = true;
    transfer(entry.balance, entry.asset, entry.account);
    emit Exited(entry.account, entry.asset, entry.balance);
  }

  function hasExited(address account, address asset) public view returns (bool) { return exited[account][asset]; }

  function canExit(bytes32 entryHash) public view returns (bool) {
    return
      exitClaims[entryHash].confirmationThreshold != 0 &&  // exists
      currentGblockNumber >= exitClaims[entryHash].confirmationThreshold;
  }

  event ExitClaimed(bytes32 hash, address indexed account, address indexed asset, uint quantity, uint timestamp, uint confirmationThreshold);
  event Exited(address indexed account, address indexed asset, uint quantity);
  event Withdrawn(bytes32 hash, address indexed account, address indexed asset, uint quantity);

  struct ExitClaim { Entry entry; uint confirmationThreshold; }

  /**************************************************** FraudProof ****************************************************/

  uint public currentGblockNumber;
  mapping(uint => Gblock) public gblocksByNumber;
  mapping(bytes32 => uint) public gblocksByDepositsRoot;
  mapping(bytes32 => uint) public gblocksByWithdrawalsRoot;
  mapping(bytes32 => uint) public gblocksByBalancesRoot;
  uint public submissionInterval;
  uint public submissionBlock = block.number;

  function canSubmit() public view returns (bool) { return block.number >= submissionBlock; }

  function submit(uint gblockNumber, bytes32 withdrawalsRoot, bytes32 depositsRoot, bytes32 balancesRoot) external whenOn {
    require(canSubmit(), "cannot submit yet");
    require(msg.sender == operator, "submitter must be the operator");
    require(gblockNumber == currentGblockNumber + 1, "gblock must be the next in sequence");
    Gblock memory gblock = Gblock(gblockNumber, withdrawalsRoot, depositsRoot, balancesRoot);
    gblocksByNumber[gblockNumber] = gblock;
    gblocksByDepositsRoot[depositsRoot] = gblockNumber;
    gblocksByWithdrawalsRoot[withdrawalsRoot] = gblockNumber;
    gblocksByBalancesRoot[balancesRoot] = gblockNumber;
    currentGblockNumber = gblockNumber;
    submissionBlock = block.number + submissionInterval;
    emit Submitted(gblockNumber, withdrawalsRoot, depositsRoot, balancesRoot);
  }

  function proveInConfirmedWithdrawals(bytes memory proof, bytes32 root, bytes32 entryHash) public view returns (bool) {
    return isConfirmedWithdrawals(root) && verifyIncluded(proof, root, entryHash);
  }

  function proveInConfirmedBalances(bytes memory proof, bytes32 root, bytes32 entryHash) public view returns (bool) {
    return
      root == gblocksByNumber[currentGblockNumber - 1 /* last-confirmed gblock */].balancesRoot &&
      verifyIncluded(proof, root, entryHash);
  }

  function proveInUnconfirmedBalances(bytes memory proof, bytes32 root, bytes32 entryHash) public view returns (bool) {
    return
      root == gblocksByNumber[currentGblockNumber /* unconfirmed gblock */].balancesRoot &&
      verifyIncluded(proof, root, entryHash);
  }

  function isConfirmedWithdrawals(bytes32 root) public view returns (bool) { return isConfirmedGblock(gblocksByWithdrawalsRoot[root]); }
  function isUnconfirmedWithdrawals(bytes32 root) public view returns (bool) { return gblocksByWithdrawalsRoot[root] == currentGblockNumber; }
  function includesWithdrawals(bytes32 root) public view returns (bool) { return gblocksByWithdrawalsRoot[root] != 0; }

  function isUnconfirmedBalances(bytes32 root) public view returns (bool) { return gblocksByBalancesRoot[root] == currentGblockNumber; }

  function isConfirmedGblock(uint number) public view returns (bool) { return 0 < number && number < currentGblockNumber; }

  event Submitted(uint gblockNumber, bytes32 withdrawalsRoot, bytes32 depositsRoot, bytes32 balancesRoot);

  struct Gblock { uint number; bytes32 withdrawalsRoot; bytes32 depositsRoot; bytes32 balancesRoot; }

  /********************************************************************************************************************/
}

    Contract ABI  
[{"constant":false,"inputs":[],"name":"switchOff","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"entryHash","type":"bytes32"}],"name":"proveInConfirmedBalances","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"nonceGenerator","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"entryHash","type":"bytes32"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"exit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"leaves","type":"bytes32[]"},{"name":"indexes","type":"uint256[]"},{"name":"predecessor","type":"bytes"},{"name":"successor","type":"bytes"}],"name":"reclaimDeposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"removeOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"isOn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"},{"name":"asset","type":"address"}],"name":"hasExited","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"leaf","type":"bytes32"},{"name":"index","type":"uint256"}],"name":"checkProofOrdered","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"visibilityDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"}],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"token","type":"address"},{"name":"quantity","type":"uint256"}],"name":"depositToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"withdrawn","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"leaf","type":"bytes32"},{"name":"index","type":"uint256"}],"name":"verifyIncludedAtIndex","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"deposits","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"submissionBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"address"},{"name":"","type":"address"}],"name":"exited","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"gblocksByNumber","outputs":[{"name":"number","type":"uint256"},{"name":"withdrawalsRoot","type":"bytes32"},{"name":"depositsRoot","type":"bytes32"},{"name":"balancesRoot","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"signature","type":"bytes"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"version","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"operator","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"leaf","type":"bytes32"}],"name":"verifyIncluded","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"entryHash","type":"bytes32"}],"name":"proveInUnconfirmedBalances","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"owner","type":"address"}],"name":"addOwner","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"registry","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"confirmationDelay","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"ETH","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"root","type":"bytes32"}],"name":"includesWithdrawals","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"gblocksByBalancesRoot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"entryHash","type":"bytes32"}],"name":"canExit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"depositEther","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"entryHash","type":"bytes32"}],"name":"proveInConfirmedWithdrawals","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getOwners","outputs":[{"name":"","type":"address[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"gblocksByWithdrawalsRoot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"root","type":"bytes32"}],"name":"isConfirmedWithdrawals","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"},{"name":"leaf","type":"bytes32"}],"name":"checkProof","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[{"name":"gblockNumber","type":"uint256"},{"name":"withdrawalsRoot","type":"bytes32"},{"name":"depositsRoot","type":"bytes32"},{"name":"balancesRoot","type":"bytes32"}],"name":"submit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"asset","type":"address"},{"name":"quantity","type":"uint256"},{"name":"nonce","type":"uint256"},{"name":"designatedGblock","type":"uint256"}],"name":"reclaimDepositOnHalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"currentGblockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"submissionInterval","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"root","type":"bytes32"}],"name":"isUnconfirmedWithdrawals","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"signature","type":"bytes"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"exitOnHalt","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"root","type":"bytes32"}],"name":"isUnconfirmedBalances","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"number","type":"uint256"}],"name":"isConfirmedGblock","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"","type":"bytes32"}],"name":"gblocksByDepositsRoot","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"addresses","type":"address[]"},{"name":"uints","type":"uint256[]"},{"name":"signature","type":"bytes"},{"name":"proof","type":"bytes"},{"name":"root","type":"bytes32"}],"name":"claimExit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"canSubmit","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"_owners","type":"address[]"},{"name":"_registry","type":"address"},{"name":"_operator","type":"address"},{"name":"_submissionInterval","type":"uint256"},{"name":"_version","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"custodian","type":"address"},{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"asset","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"},{"indexed":false,"name":"designatedGblock","type":"uint256"}],"name":"Deposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"custodian","type":"address"},{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"asset","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"},{"indexed":false,"name":"nonce","type":"uint256"}],"name":"DepositReclaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"hash","type":"bytes32"},{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"asset","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"},{"indexed":false,"name":"timestamp","type":"uint256"},{"indexed":false,"name":"confirmationThreshold","type":"uint256"}],"name":"ExitClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"asset","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"}],"name":"Exited","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"hash","type":"bytes32"},{"indexed":true,"name":"account","type":"address"},{"indexed":true,"name":"asset","type":"address"},{"indexed":false,"name":"quantity","type":"uint256"}],"name":"Withdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"gblockNumber","type":"uint256"},{"indexed":false,"name":"withdrawalsRoot","type":"bytes32"},{"indexed":false,"name":"depositsRoot","type":"bytes32"},{"indexed":false,"name":"balancesRoot","type":"bytes32"}],"name":"Submitted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"}],"name":"OwnerRemoved","type":"event"},{"anonymous":false,"inputs":[],"name":"Off","type":"event"}]

  Contract Creation Code Switch To Opcodes View
60806040526000805460ff191660011790556200002464010000000062000367810204565b805180516003805460208085015160408087015160609788015160ff1995861660ff9889161761ff0019908116610100958a1686021762ff00001990811662010000948b1685021763ff000000199081166301000000948c168502179099559a860151805160048054988301519683015192909c015197909816978a16979097171692881690930291909117909716928516909602919091179091169116909202919091179055600060065543601355348015620000e157600080fd5b50604051620051d2380380620051d2833981018060405260a08110156200010757600080fd5b8101908080516401000000008111156200012057600080fd5b820160208101848111156200013457600080fd5b81518560208202830111640100000000821117156200015257600080fd5b505060208201516040830151606084015160809094018051939692959194936401000000008111156200018457600080fd5b820160208101848111156200019857600080fd5b8151640100000000811182820187101715620001b357600080fd5b50909350839250879150600090505b81518110156200020757620001fe8282815181101515620001df57fe5b90602001906020020151620003d3640100000000026401000000009004565b600101620001c2565b5080516200021d906002906020840190620004fd565b505080516200023490600590602084019062000567565b50849050600160a060020a0381161515620002b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b83600160a060020a03811615156200032957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b505060078054600160a060020a03948516600160a060020a0319918216179091556008805495909416941693909317909155601255506200067e9050565b62000371620005e8565b506040805160c081018252600381830181815260608084018390526004608080860191909152600660a0860152918452845191820185529181526007602082810191909152600a94820194909452601191810191909152918101919091525b90565b80600160a060020a03811615156200044c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602052604090205460ff161515620004f957600160a060020a0382166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054600160a060020a03191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25b5050565b82805482825590600052602060002090810192821562000555579160200282015b82811115620005555782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906200051e565b506200056392915062000613565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005aa57805160ff1916838001178555620005da565b82800160010185558215620005da579182015b82811115620005da578251825591602001919060010190620005bd565b50620005639291506200063a565b61010060405190810160405280620005ff62000657565b81526020016200060e62000657565b905290565b620003d091905b8082111562000563578054600160a060020a03191681556001016200061a565b620003d091905b8082111562000563576000815560010162000641565b60408051608081018252600080825260208201819052918101829052606081019190915290565b614b44806200068e6000396000f3fe6080604052600436106102a5576000357c0100000000000000000000000000000000000000000000000000000000900480637065cb4811610177578063bf0af1ba116100de578063ebf5906811610097578063ebf590681461115e578063ee849630146112d1578063f10e482f146112fb578063f617a32d14611325578063fb4416631461134f578063ffbc9bd0146114c2576102a5565b8063bf0af1ba14610fd1578063c8a8ac2e14611089578063da9b2958146110c5578063e13c96a91461110a578063e1a41bcf1461111f578063e58c967714611134576102a5565b8063985bcf3411610130578063985bcf3414610e2e57806398ea5fca14610e585780639a8e896314610e60578063a0e67e2b14610f18578063aca2500d14610f7d578063be3fe19714610fa7576102a5565b80637065cb4814610d685780637b10399914610d9b57806380de7f9114610db05780638322fff214610dc557806387b5ac0514610dda5780638d670aa714610e04576102a5565b8063338b5dea1161021b5780634732fb02116101d45780634732fb021461097a5780634cbd7a26146109ca57806354fd4d5014610b3d578063570ca73514610bc757806358f4996f14610bf857806361b9e2bb14610cb0576102a5565b8063338b5dea146107df5780633823d66c1461081857806338da5b07146108425780633d4dff7b14610900578063413350bd1461092a578063416982351461093f576102a5565b8063173825d91161026d578063173825d914610656578063175bbecf146106895780631a74d5361461069e57806323a27bcd146106d95780632e8ff5bd146107975780632f54bf6e146107ac576102a5565b8063038d71ee146102b3578063057c824f146102c857806306ba9aa7146103945780630b8514b9146103bb57806314f1244c1461043f575b6102b1336000346114d7565b005b3480156102bf57600080fd5b506102b16115c3565b3480156102d457600080fd5b50610380600480360360608110156102eb57600080fd5b81019060208101813564010000000081111561030657600080fd5b82018360208201111561031857600080fd5b8035906020019184600183028401116401000000008311171561033a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013561166b565b604080519115158252519081900360200190f35b3480156103a057600080fd5b506103a96116a2565b60408051918252519081900360200190f35b3480156103c757600080fd5b506102b1600480360360608110156103de57600080fd5b8135919081019060408101602082013564010000000081111561040057600080fd5b82018360208201111561041257600080fd5b8035906020019184600183028401116401000000008311171561043457600080fd5b9193509150356116a8565b34801561044b57600080fd5b506102b1600480360360c081101561046257600080fd5b81019060208101813564010000000081111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460208302840111640100000000831117156104b157600080fd5b9193909290916020810190356401000000008111156104cf57600080fd5b8201836020820111156104e157600080fd5b8035906020019184602083028401116401000000008311171561050357600080fd5b91939092909160208101903564010000000081111561052157600080fd5b82018360208201111561053357600080fd5b8035906020019184602083028401116401000000008311171561055557600080fd5b91939092909160208101903564010000000081111561057357600080fd5b82018360208201111561058557600080fd5b803590602001918460208302840111640100000000831117156105a757600080fd5b9193909290916020810190356401000000008111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460018302840111640100000000831117156105f957600080fd5b91939092909160208101903564010000000081111561061757600080fd5b82018360208201111561062957600080fd5b8035906020019184600183028401116401000000008311171561064b57600080fd5b5090925090506119fe565b34801561066257600080fd5b506102b16004803603602081101561067957600080fd5b5035600160a060020a0316611cbf565b34801561069557600080fd5b50610380611ed6565b3480156106aa57600080fd5b50610380600480360360408110156106c157600080fd5b50600160a060020a0381358116916020013516611edf565b3480156106e557600080fd5b50610380600480360360808110156106fc57600080fd5b81019060208101813564010000000081111561071757600080fd5b82018360208201111561072957600080fd5b8035906020019184600183028401116401000000008311171561074b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060400135611f0f565b3480156107a357600080fd5b506103a96120ea565b3480156107b857600080fd5b50610380600480360360208110156107cf57600080fd5b5035600160a060020a03166120ef565b3480156107eb57600080fd5b506102b16004803603604081101561080257600080fd5b50600160a060020a038135169060200135612104565b34801561082457600080fd5b506103806004803603602081101561083b57600080fd5b503561239b565b34801561084e57600080fd5b506103806004803603608081101561086557600080fd5b81019060208101813564010000000081111561088057600080fd5b82018360208201111561089257600080fd5b803590602001918460018302840111640100000000831117156108b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602081013590604001356123b0565b34801561090c57600080fd5b506103806004803603602081101561092357600080fd5b50356123c7565b34801561093657600080fd5b506103a96123dc565b34801561094b57600080fd5b506103806004803603604081101561096257600080fd5b50600160a060020a03813581169160200135166123e2565b34801561098657600080fd5b506109a46004803603602081101561099d57600080fd5b5035612402565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156109d657600080fd5b506102b1600480360360a08110156109ed57600080fd5b810190602081018135640100000000811115610a0857600080fd5b820183602082011115610a1a57600080fd5b80359060200191846020830284011164010000000083111715610a3c57600080fd5b919390929091602081019035640100000000811115610a5a57600080fd5b820183602082011115610a6c57600080fd5b80359060200191846020830284011164010000000083111715610a8e57600080fd5b919390929091602081019035640100000000811115610aac57600080fd5b820183602082011115610abe57600080fd5b80359060200191846001830284011164010000000083111715610ae057600080fd5b919390929091602081019035640100000000811115610afe57600080fd5b820183602082011115610b1057600080fd5b80359060200191846001830284011164010000000083111715610b3257600080fd5b919350915035612429565b348015610b4957600080fd5b50610b52612756565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610b8c578181015183820152602001610b74565b50505050905090810190601f168015610bb95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd357600080fd5b50610bdc6127e4565b60408051600160a060020a039092168252519081900360200190f35b348015610c0457600080fd5b5061038060048036036060811015610c1b57600080fd5b810190602081018135640100000000811115610c3657600080fd5b820183602082011115610c4857600080fd5b80359060200191846001830284011164010000000083111715610c6a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356127f3565b348015610cbc57600080fd5b5061038060048036036060811015610cd357600080fd5b810190602081018135640100000000811115610cee57600080fd5b820183602082011115610d0057600080fd5b80359060200191846001830284011164010000000083111715610d2257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135612800565b348015610d7457600080fd5b506102b160048036036020811015610d8b57600080fd5b5035600160a060020a0316612829565b348015610da757600080fd5b50610bdc61289b565b348015610dbc57600080fd5b506103a96128aa565b348015610dd157600080fd5b50610bdc6128af565b348015610de657600080fd5b5061038060048036036020811015610dfd57600080fd5b50356128b4565b348015610e1057600080fd5b506103a960048036036020811015610e2757600080fd5b50356128c8565b348015610e3a57600080fd5b5061038060048036036020811015610e5157600080fd5b50356128da565b6102b1612910565b348015610e6c57600080fd5b5061038060048036036060811015610e8357600080fd5b810190602081018135640100000000811115610e9e57600080fd5b820183602082011115610eb057600080fd5b80359060200191846001830284011164010000000083111715610ed257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013561291c565b348015610f2457600080fd5b50610f2d612939565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610f69578181015183820152602001610f51565b505050509050019250505060405180910390f35b348015610f8957600080fd5b506103a960048036036020811015610fa057600080fd5b503561299c565b348015610fb357600080fd5b5061038060048036036020811015610fca57600080fd5b50356129ae565b348015610fdd57600080fd5b5061038060048036036060811015610ff457600080fd5b81019060208101813564010000000081111561100f57600080fd5b82018360208201111561102157600080fd5b8035906020019184600183028401116401000000008311171561104357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356129c6565b34801561109557600080fd5b506102b1600480360360808110156110ac57600080fd5b5080359060208101359060408101359060600135612ac8565b3480156110d157600080fd5b506102b1600480360360808110156110e857600080fd5b50600160a060020a038135169060208101359060408101359060600135612ced565b34801561111657600080fd5b506103a9612db2565b34801561112b57600080fd5b506103a9612db8565b34801561114057600080fd5b506103806004803603602081101561115757600080fd5b5035612dbe565b34801561116a57600080fd5b506102b1600480360360a081101561118157600080fd5b81019060208101813564010000000081111561119c57600080fd5b8201836020820111156111ae57600080fd5b803590602001918460208302840111640100000000831117156111d057600080fd5b9193909290916020810190356401000000008111156111ee57600080fd5b82018360208201111561120057600080fd5b8035906020019184602083028401116401000000008311171561122257600080fd5b91939092909160208101903564010000000081111561124057600080fd5b82018360208201111561125257600080fd5b8035906020019184600183028401116401000000008311171561127457600080fd5b91939092909160208101903564010000000081111561129257600080fd5b8201836020820111156112a457600080fd5b803590602001918460018302840111640100000000831117156112c657600080fd5b919350915035612dd5565b3480156112dd57600080fd5b50610380600480360360208110156112f457600080fd5b503561300e565b34801561130757600080fd5b506103806004803603602081101561131e57600080fd5b5035613025565b34801561133157600080fd5b506103a96004803603602081101561134857600080fd5b503561303a565b34801561135b57600080fd5b506102b1600480360360a081101561137257600080fd5b81019060208101813564010000000081111561138d57600080fd5b82018360208201111561139f57600080fd5b803590602001918460208302840111640100000000831117156113c157600080fd5b9193909290916020810190356401000000008111156113df57600080fd5b8201836020820111156113f157600080fd5b8035906020019184602083028401116401000000008311171561141357600080fd5b91939092909160208101903564010000000081111561143157600080fd5b82018360208201111561144357600080fd5b8035906020019184600183028401116401000000008311171561146557600080fd5b91939092909160208101903564010000000081111561148357600080fd5b82018360208201111561149557600080fd5b803590602001918460018302840111640100000000831117156114b757600080fd5b91935091503561304c565b3480156114ce57600080fd5b50610380613468565b60005460ff161515611521576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b6006805460010190819055600d5460030161153a614692565b6115478686868686613471565b60a0810151600090815260096020908152604091829020805460ff1916600117905581518781529081018690528082018590529051919250600160a060020a03808816929089169130917fe1d62a717c13e8309c9a6a54be6a5f04d7fad0018f9c736406cf50fbe6adf4de9181900360600190a4505050505050565b3360009081526001602052604090205460ff16151561162c576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b60005460ff1615611669576000805460ff191681556040517f369554cf721939830e3356301e1150520b7a57198eaabd24211952c158f3ba4e9190a15b565b600d54600019016000908152600e60205260408120600301548314801561169857506116988484846127f3565b90505b9392505050565b60065481565b60005460ff1615156116f2576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b6116fa6146c7565b6000858152600b60205260409081902081516101c081018352815490928391908201908390829060ff16600681111561172f57fe5b600681111561173a57fe5b815260018201546020808301919091526002830154604080840191909152600384015460608401526004840154600160a060020a03908116608085015260058501541660a0840152600684015460c0840152600784015460e084015260088401546101008401526009840180548251818502810185019093528083526101209094019391929091908301828280156117fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116117dd575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561185357602002820191906000526020600020905b81548152602001906001019080831161183f575b50505050508152602001600b820154815250508152602001600c82015481525050905061187f856128da565b15156118bf5760405160e560020a62461bcd0281526004018080602001828103825260448152602001806149036044913960600191505060405180910390fd5b61190284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692508991506128009050565b1515611958576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b6000858152600b60205260408120805460ff19168155600181018290556002810182905560038101829055600481018054600160a060020a031990811690915560058201805490911690556006810182905560078101829055600881018290559081816119c860098301826146e9565b6119d6600a830160006146e9565b600b8201600090555050600c82016000905550506119f78160000151613508565b5050505050565b611a06614707565b611b5f8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a908190840183828082843760009201919091525061361992505050565b9050611b69614692565b5080518051600160a060020a03163314611bb75760405160e560020a62461bcd02815260040180806020018281038252602781526020018061498d6027913960400191505060405180910390fd5b8060800151600d54118015611bcf5750608081015115155b1515611c0f5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180614ab0602b913960400191505060405180910390fd5b611c1761473b565b506080808201516000908152600e602090815260409182902082519384018352805484526001810154918401919091526002810154918301829052600301546060830152611c6590846136e0565b1515611ca55760405160e560020a62461bcd0281526004018080602001828103825260248152602001806149696024913960400191505060405180910390fd5b611cae82613741565b505050505050505050505050505050565b3360009081526001602052604090205460ff161515611d28576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460ff1615611ed357600254600110611d8d5760405160e560020a62461bcd028152600401808060200182810382526026815260200180614a206026913960400191505060405180910390fd5b600160a060020a0381166000908152600160205260408120805460ff191690555b60025460001901811015611e895781600160a060020a0316600282815481101515611dd557fe5b600091825260209091200154600160a060020a03161415611e8157600280546000198101908110611e0257fe5b60009182526020909120015460028054600160a060020a039092169183908110611e2857fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600280546000198101908110611e6357fe5b60009182526020909120018054600160a060020a0319169055611e89565b600101611dae565b50600280546000190190611e9d9082614762565b50604051600160a060020a038216907f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da90600090a25b50565b60005460ff1681565b600160a060020a038083166000908152600c602090815260408083209385168352929052205460ff165b92915050565b8351600090601f1615611f24575060006120e2565b6000838160205b885181116120da578089015193506020818a5103602001811515611f4b57fe5b0491505b600082118015611f625750600286066001145b8015611f7057508160020a86115b15611f8357600286046001019550611f4f565b6002860615156120305760408051602080820187905281830186905282518083038401815260608301909352825160809092019182918401908083835b60208310611fdf5780518252601f199092019160209182019101611fc0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120925060028681151561202857fe5b0495506120d2565b60408051602080820186905281830187905282518083038401815260608301909352825160809092019182918401908083835b602083106120825780518252601f199092019160209182019101612063565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012092506002868115156120cb57fe5b0460010195505b602001611f2b565b505085149150505b949350505050565b600381565b60016020526000908152604090205460ff1681565b81600160a060020a038116151561214f5760405160e560020a62461bcd0281526004018080602001828103825260298152602001806149d76029913960400191505060405180910390fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038616916370a0823191602480820192602092909190829003018186803b1580156121b257600080fd5b505afa1580156121c6573d6000803e3d6000fd5b505050506040513d60208110156121dc57600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051919250600160a060020a038616916323b872dd916064808201926020929091908290030181600087803b15801561225057600080fd5b505af1158015612264573d6000803e3d6000fd5b505050506040513d602081101561227a57600080fd5b505115156122bc5760405160e560020a62461bcd028152600401808060200182810382526027815260200180614a466027913960400191505060405180910390fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038716916370a0823191602480820192602092909190829003018186803b15801561231f57600080fd5b505afa158015612333573d6000803e3d6000fd5b505050506040513d602081101561234957600080fd5b5051905081810384146123905760405160e560020a62461bcd028152600401808060200182810382526043815260200180614a6d6043913960600191505060405180910390fd5b6119f73386866114d7565b600a6020526000908152604090205460ff1681565b60006123be85858585611f0f565b95945050505050565b60096020526000908152604090205460ff1681565b60135481565b600c60209081526000928352604080842090915290825290205460ff1681565b600e6020526000908152604090208054600182015460028301546003909301549192909184565b612431614786565b61249e8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b90506124f281610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a031633146125405760405160e560020a62461bcd0281526004018080602001828103825260228152602001806149476022913960400191505060405180910390fd5b60038151600681111561254f57fe5b146125a4576040805160e560020a62461bcd02815260206004820181905260248201527f656e747279206d757374206265206f662074797065205769746864726177616c604482015290519081900360640190fd5b6125ea84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061291c565b1515612640576040805160e560020a62461bcd02815260206004820152601360248201527f696e76616c696420656e7472792070726f6f6600000000000000000000000000604482015290519081900360640190fd5b6101608101516000908152600a602052604090205460ff16156126ad576040805160e560020a62461bcd02815260206004820152601760248201527f656e74727920616c72656164792077697468647261776e000000000000000000604482015290519081900360640190fd5b6101608101516000908152600a60205260409020805460ff1916600117905560c081015160a082015160808301516126e6929190613a65565b8060a00151600160a060020a03168160800151600160a060020a03167fa6786aab7dbbc48b4b0387488b407bd81448030ab207b50bea7dbb5fbc1cd9eb8361016001518460c00151604051808381526020018281526020019250505060405180910390a350505050505050505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156127dc5780601f106127b1576101008083540402835291602001916127dc565b820191906000526020600020905b8154815290600101906020018083116127bf57829003601f168201915b505050505081565b600754600160a060020a031681565b60006116988484846129c6565b600d546000908152600e60205260408120600301548314801561169857506116988484846127f3565b3360009081526001602052604090205460ff161515612892576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b611ed381613bf2565b600854600160a060020a031681565b600581565b600081565b600090815260106020526040902054151590565b60116020526000908152604090205481565b6000818152600b60205260408120600c015415801590611f095750506000908152600b60205260409020600c0154600d54101590565b611669336000346114d7565b6000612927836129ae565b801561169857506116988484846127f3565b6060600280548060200260200160405190810160405280929190818152602001828054801561299157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311612973575b505050505090505b90565b60106020526000908152604090205481565b600081815260106020526040812054611f0990613025565b8251600090601f16156129db5750600061169b565b8360008360205b87518111612abb57808401519250828210612a1e5760408051602081018590528082018490528151808203830181526060909101909152612a41565b604080516020810184905280820185905281518082038301815260609091019091525b6040516020018082805190602001908083835b60208310612a735780518252601f199092019160209182019101612a54565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012091506020810190506129e2565b5090941495945050505050565b60005460ff161515612b12576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b612b1a613468565b1515612b70576040805160e560020a62461bcd02815260206004820152601160248201527f63616e6e6f74207375626d697420796574000000000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a03163314612bd2576040805160e560020a62461bcd02815260206004820152601e60248201527f7375626d6974746572206d75737420626520746865206f70657261746f720000604482015290519081900360640190fd5b600d546001018414612c185760405160e560020a62461bcd0281526004018080602001828103825260238152602001806149b46023913960400191505060405180910390fd5b612c2061473b565b5060408051608081810183528682526020808301878152838501878152606080860188815260008c8152600e865288812088518155945160018601559251600285015551600390930192909255878152600f83528581208a9055888152601083528581208a905586815260118352859020899055600d899055601254430160135584518981529182018890528185018790528101859052925191927f0f1e10d65da94fe52cbe318a976fc653ab247aa5c0768c12a34e2353b1eb6ab4929081900390910190a15050505050565b60005460ff1615612d48576040805160e560020a62461bcd02815260206004820152600b60248201527f6d757374206265206f6666000000000000000000000000000000000000000000604482015290519081900360640190fd5b612d50614692565b612d5d3386868686613471565b9050600d54816080015110151515612da95760405160e560020a62461bcd02815260040180806020018281038252603e815260200180614adb603e913960400191505060405180910390fd5b6119f781613741565b600d5481565b60125481565b600d54600091825260106020526040909120541490565b60005460ff1615612e30576040805160e560020a62461bcd02815260206004820152600b60248201527f6d757374206265206f6666000000000000000000000000000000000000000000604482015290519081900360640190fd5b612e38614786565b612ea58a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b9050612ef981610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a03163314612f5d576040805160e560020a62461bcd02815260206004820181905260248201527f636c61696d616e74206d75737420626520656e7472792773206163636f756e74604482015290519081900360640190fd5b612fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061166b565b1515612ff9576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b61300281613508565b50505050505050505050565b600d54600091825260116020526040909120541490565b6000816000108015611f09575050600d541190565b600f6020526000908152604090205481565b60005460ff161515613096576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b61309e614786565b61310b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b905061315f81610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a031633146131c3576040805160e560020a62461bcd02815260206004820181905260248201527f636c61696d616e74206d75737420626520656e7472792773206163636f756e74604482015290519081900360640190fd5b6131d581608001518260a00151611edf565b1561322a576040805160e560020a62461bcd02815260206004820152601160248201527f70726576696f75736c7920657869746564000000000000000000000000000000604482015290519081900360640190fd5b61327084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061166b565b15156132c6576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b600d54604080518082018252838152600590920160208084018290526101608501516000908152600b90915291909120825180518254939493839190829060ff1916600183600681111561331657fe5b0217905550602082810151600183015560408301516002830155606083015160038301556080830151600483018054600160a060020a03928316600160a060020a03199182161790915560a085015160058501805491909316911617905560c0830151600683015560e08301516007830155610100830151600883015561012083015180516133ab92600985019201906147fd565b5061014082015180516133c891600a840191602090910190614862565b5061016082015181600b01555050602082015181600c01559050508160a00151600160a060020a03168260800151600160a060020a03167f033fd1dc81f5c58d2987171bd5432008ce60e028fd6b687900ef31dcbeee03348461016001518560e001518660400151866040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050565b60135443101590565b613479614692565b600160a060020a039586168082529490951660208087018290526040808801869052606088018590526080880184905280516c01000000000000000000000000308102828501529788026034820152969092026048870152605c860194909452607c850192909252609c808501919091528151808503909101815260bc9093019052815191012060a082015290565b61351a81608001518260a00151611edf565b1561356f576040805160e560020a62461bcd02815260206004820152601160248201527f70726576696f75736c7920657869746564000000000000000000000000000000604482015290519081900360640190fd5b608081018051600160a060020a039081166000908152600c6020908152604080832060a08701805190951684529091529020805460ff1916600117905560e0830151905191516135bf9290613a65565b8060a00151600160a060020a03168160800151600160a060020a03167f104ad9ab27213fcc307f2308fc015959def8986f04d9475d82c5f32ab9c8d83b8360e001516040518082815260200191505060405180910390a350565b613621614707565b61362b8787613d03565b81526040805160608101909152855181908790600090811061364957fe5b90602001906020020151815260200185600081518110151561366757fe5b90602001906020020151815260200184815250816020018190525060606040519081016040528086600181518110151561369d57fe5b9060200190602002015181526020018560018151811015156136bb57fe5b9060200190602002015181526020018381525081604001819052509695505050505050565b600081602001516020015160010182604001516020015114801561371d575060208083015160408101518151919092015161371d929186916123b0565b801561169b575060408083015190810151815160209092015161169b9286916123b0565b60a081015160009081526009602052604090205460ff1615156137ae576040805160e560020a62461bcd02815260206004820152600f60248201527f756e6b6e6f776e206465706f7369740000000000000000000000000000000000604482015290519081900360640190fd5b60a0810151600090815260096020908152604091829020805460ff19169055908201519082015182516137e2929190613a65565b8060200151600160a060020a03168160000151600160a060020a031630600160a060020a03167fcae41644ed0b3c3127d183a2914bded089d52603e835f1cd7ae830d7803cd03384604001518560600151604051808381526020018281526020019250505060405180910390a450565b61385a614786565b3083600081518110151561386a57fe5b600160a060020a0390921660209283029091019091015282518390600190811061389057fe5b60209081029091010151600160a060020a031660808201528251839060029081106138b757fe5b60209081029091010151600160a060020a031660a08201528151829060009081106138de57fe5b9060200190602002015160068111156138f357fe5b8190600681111561390057fe5b9081600681111561390d57fe5b90525081518290600190811061391f57fe5b60209081029091018101519082015281518290600290811061393d57fe5b60209081029091010151604082015281518290600390811061395b57fe5b60209081029091010151606082015281518290600490811061397957fe5b6020908102909101015160c082015281518290600590811061399757fe5b6020908102909101015160e08201528151829060069081106139b557fe5b602090810290910101516101008201526101208101839052610140810182905280516139e2908484613d90565b61016082015292915050565b80600160a060020a0316613a028484613e4e565b600160a060020a031614613a60576040805160e560020a62461bcd02815260206004820152601a60248201527f6661696c656420746f20766572696679207369676e6174757265000000000000604482015290519081900360640190fd5b505050565b600160a060020a03821615613b775781600160a060020a031663a9059cbb82856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015613af057600080fd5b505af1158015613b04573d6000803e3d6000fd5b505050506040513d6020811015613b1a57600080fd5b50511515613b72576040805160e560020a62461bcd02815260206004820152601860248201527f6661696c656420746f207472616e7366657220746f6b656e0000000000000000604482015290519081900360640190fd5b613a60565b604051600160a060020a0382169084156108fc029085906000818181858888f193505050501515613a60576040805160e560020a62461bcd02815260206004820152601860248201527f6661696c656420746f207472616e736665722065746865720000000000000000604482015290519081900360640190fd5b80600160a060020a0381161515613c53576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602052604090205460ff161515613cff57600160a060020a0382166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054600160a060020a03191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25b5050565b613d0b614692565b61169b836001815181101515613d1d57fe5b90602001906020020151846002815181101515613d3657fe5b90602001906020020151846000815181101515613d4f57fe5b90602001906020020151856001815181101515613d6857fe5b90602001906020020151866002815181101515613d8157fe5b90602001906020020151613471565b600080613d9d8484613f1f565b90506000613dac8686866140a6565b9050818160405160200180838152602001828152602001925050506040516020818303038152906040526040516020018082805190602001908083835b60208310613e085780518252601f199092019160209182019101613de9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120925050509392505050565b60008060008084516041141515613e6b5760009350505050611f09565b50505060208201516040830151606084015160001a601b60ff82161015613e9057601b015b8060ff16601b14158015613ea857508060ff16601c14155b613f12576040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f03573d6000803e3d6000fd5b50505060206040510351613f15565b60005b9695505050505050565b6000826000815181101515613f3057fe5b90602001906020020151836001815181101515613f4957fe5b90602001906020020151846002815181101515613f6257fe5b90602001906020020151846000815181101515613f7b57fe5b90602001906020020151856001815181101515613f9457fe5b90602001906020020151866002815181101515613fad57fe5b90602001906020020151876003815181101515613fc657fe5b90602001906020020151886004815181101515613fdf57fe5b90602001906020020151896005815181101515613ff857fe5b906020019060200201518a600681518110151561401157fe5b6020908102909101810151604080516c01000000000000000000000000600160a060020a039d8e168102828601529b8d168c02603482015299909b169099026048890152605c880196909652607c870194909452609c86019290925260bc85015260dc84015260fc83015261011c808301939093528351808303909301835261013c9091019092528051910120905092915050565b600060028460068111156140b657fe5b14156140cc576140c5826141b5565b905061169b565b60038460068111156140da57fe5b14156140ea576140c58383614237565b60058460068111156140f857fe5b148061410f5750600684600681111561410d57fe5b145b1561411e576140c58383614355565b6000604051602001808281526020019150506040516020818303038152906040526040516020018082805190602001908083835b602083106141715780518252601f199092019160209182019101614152565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090509392505050565b6004548151600091839161010090910460ff169081106141d157fe5b602090810290910101516004548351849160ff6101009091048116600101169081106141f957fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6003548251600091849161010090910460ff1690811061425357fe5b602090810290910101516003548451859160ff61010090910481166001011690811061427b57fe5b602090810290910101516004548451859160ff6101009091041690811061429e57fe5b602090810290910101516004548551869160ff6101009091048116600101169081106142c657fe5b906020019060200201516040516020018085600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140184600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140183815260200182815260200194505050505060405160208183030381529060405280519060200120905092915050565b60035460045460009161437b918591859160ff6101009283900481169290910416614402565b6003546004546143a0918691869160ff620100009182900481169291909104166144dd565b6003546004546143c6918791879160ff63010000009182900481169291909104166144dd565b60405160200180848152602001838152602001828152602001935050505060405160208183030381529060405280519060200120905092915050565b8351600090859060ff851690811061441657fe5b602090810290910101518451859060ff851690811061443157fe5b90602001906020020151858460010160ff1681518110151561444f57fe5b90602001906020020151868560020160ff1681518110151561446d57fe5b906020019060200201516040516020018085600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b8351600090859060ff85169081106144f157fe5b90602001906020020151858460010160ff1681518110151561450f57fe5b602090810290910101518551869060ff861690811061452a57fe5b90602001906020020151868560010160ff1681518110151561454857fe5b90602001906020020151878660020160ff1681518110151561456657fe5b90602001906020020151888760030160ff1681518110151561458457fe5b90602001906020020151898860040160ff168151811015156145a257fe5b906020019060200201518a8960050160ff168151811015156145c057fe5b906020019060200201518b8a60060160ff168151811015156145de57fe5b90602001906020020151604051602001808a600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140189600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018881526020018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050949350505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6101a0604051908101604052806146dc614786565b8152602001600081525090565b5080546000825590600052602060002090810190611ed391906148a5565b6101806040519081016040528061471c614692565b81526020016147296148bf565b81526020016147366148bf565b905290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b815481835581811115613a6057600083815260209020613a609181019083016148a5565b60408051610180810190915280600081526020016000815260200160008152602001600081526020016000600160a060020a031681526020016000600160a060020a031681526020016000815260200160008152602001600081526020016060815260200160608152602001600080191681525090565b828054828255906000526020600020908101928215614852579160200282015b828111156148525782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061481d565b5061485e9291506148de565b5090565b82805482825590600052602060002090810192821561489d579160200282015b8281111561489d578251825591602001919060010190614882565b5061485e9291505b61299991905b8082111561485e57600081556001016148ab565b6040805160608181018352600080835260208301529181019190915290565b61299991905b8082111561485e578054600160a060020a03191681556001016148e456fe6e6f207072696f7220636c61696d20666f756e6420746f207769746864726177204f522062616c616e636573206172652079657420746f20626520636f6e6669726d656477697468647261776572206d75737420626520656e7472792773206163636f756e746661696c656420746f2070726f6f66206578636c7573696f6e206f66206465706f736974636c61696d616e74206d75737420626520746865206f726967696e616c206465706f7369746f7267626c6f636b206d75737420626520746865206e65787420696e2073657175656e636576616c7565206d75737420626520612076616c696420455243323020746f6b656e20616464726573736d757374206265206f6e0000000000000000000000000000000000000000000072656d6f76696e6720746865206c617374206f776e6572206973206e6f7420616c6c6f7765646661696c75726520746f207472616e73666572207175616e746974792066726f6d20746f6b656e62616420546f6b656e3b207472616e7366657246726f6d206572726f6e656f75736c79207265706f72746564206f66207375636365737366756c207472616e7366657264657369676e617465642067626c6f636b20697320756e636f6e6669726d6564206f7220756e6b6e6f776e64657369676e617465642067626c6f636b20697320616c726561647920636f6e6669726d65643b2075736520657869744f6e48616c7420696e7374656164a165627a7a72305820a08ba1878315161728955c744a4e4cf7752dfcdb35dab61ffc4ecc53c42e0cb4002900000000000000000000000000000000000000000000000000000000000000a00000000000000000000000003c1ae9f71c8384181750f0d02aaaa5089754c50f00000000000000000000000072dcc3cf050dda45bfe3da608de044e5b47316d8000000000000000000000000000000000000000000000000000000000000000f000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000030000000000000000000000004d2130d9d20428dc249a1e938a0bcea4b5b9ac1a000000000000000000000000ff423afeb0e6d997163467b39b7bd192cffd38bc000000000000000000000000ac01f01f51f0bdd012c1838bd5cef330e6c7ffca0000000000000000000000000000000000000000000000000000000000000006302e34312e300000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
11 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000003c1ae9f71c8384181750f0d02aaaa5089754c50f
Arg [2] : 00000000000000000000000072dcc3cf050dda45bfe3da608de044e5b47316d8
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [6] : 0000000000000000000000004d2130d9d20428dc249a1e938a0bcea4b5b9ac1a
Arg [7] : 000000000000000000000000ff423afeb0e6d997163467b39b7bd192cffd38bc
Arg [8] : 000000000000000000000000ac01f01f51f0bdd012c1838bd5cef330e6c7ffca
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [10] : 302e34312e300000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://a08ba1878315161728955c744a4e4cf7752dfcdb35dab61ffc4ecc53c42e0cb4

 

View All
Block Age transaction Difficulty GasUsed Reward
View All
Block Age UncleNumber Difficulty GasUsed Reward