Contract Overview
Balance: 6.60046340918 Ether
Transactions: 2931 txns
 Latest 25 transactions from a total of 2931 transactions

TxHash Age From To Value [TxFee]
0x4863ef9632633535a045545442e36753d8a5afbf891a850d921b8ce7c9a5331c3 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002505375
0xc78cf8d747d5159c8bf7d733bda1cf7f941f713ab7efa6d1b92c5988a7e4a6c26 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0x43a0383af400aeb562995bf3942230619be12fc36952c98c7a6ef1d39af40e2410 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xf6c7bf4c39436e66e4bfe703637d5f29779d0b0bd891461ec92368398ad7b42c15 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0x3c38784a9f561d141356d94ba59d2ed1dd70993120145aa66218e727d1b602c118 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167025
0x781be1da6bc2c323419989a4078b6f9e17ccc7ff260de0e01c65cd1ddb2ea1c722 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167025
0xeed046598df89faed7bb6768a29a3bdc66129c95e195e9947a907ffbcf8331f826 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167025
0xf4cec8bb56d9f0dd851f77f69ef01a68e09db735adc2f73e80f528871f5ee32f31 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0x2caaaad4012c4870706b29835b8c19c0798ba7c70eaf4e8843572984a8079d8534 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000166961
0x12359037069b9fa3b53eb2a783c9e7238c333d3e7c84ca751c79a40f7ad9b83538 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xd749d186552689259c4aaf2056cee5c1b3232d4f207dd57cd8fcb9b0363634c942 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xf05b1556aff7afdef08a011354dc4470b48da4d1abc681e0182a40063f11220e49 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002505375
0x3de6e14efa1829f9db3b26a76d81ca563f92265c54cc1fb6780538199792310052 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002506335
0x0d30464b9276301b7bda8faf858f6d888f39eae74047331e2835b5ed186ebe8f55 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002506335
0x29c798f782e7a0929316c0907d04ace028ff1c09191f2314f12c8ab4b4c0185d59 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002506335
0xdea65e8ea6b1fa72f9d496b289ff7cdebb5832f114e9cf29834032d94c805d461 hr 2 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002506335
0x9cd5cae55aa3c90850ce73d0b81905ed008600b3eaf4363b60ec9b1ee25ad4df1 hr 5 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xd57176f21138dde56d2f2e231aa2c015094711f40efb89831f22a26d07a26c1e1 hr 7 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002505375
0x4d716a576c666bf1af6fdf3f23b93f96b4adf68acb6098011eafb733764c36fd1 hr 10 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.0002506335
0xfe37f4050ece0871223d082ec97fe8f7541773de962ea2845aa6ce45b8022bda1 hr 12 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xb4971b81cdf60f4c5bbba125f65d4c8e3ec5e977885e45ccc21875e892073b071 hr 17 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167025
0xd559f0b17b6ceae500ae87d413f448a0985b4978eb8f8be8f62c96d5617fcb9e1 hr 19 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xcd6f07f3164704a41c2ee6b4bb8244653b6bbeca9f7e52af76c1cd1890f2b4eb1 hr 24 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167025
0x0c04312e29e731edf09fc05e7402421d386d0dc673683a25333d85eb838919ad1 hr 26 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 Ether0.000167089
0xcfb4fa1ca1585531ebe05d0badd80d66b52e1cebafab0ef8fcea6a253cac1dc91 hr 30 mins ago0x3a168c9baeaffe3b59e86ccf56877dd832477a5e  IN   0xf2973854948298f29737ebacfdf4946a07cd60500 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
0xb94326da9730932d24758ad282d7f68ea1b98183f7503f63474984c73d9ae01350514061 day 2 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.000122256 Ether
0xb94326da9730932d24758ad282d7f68ea1b98183f7503f63474984c73d9ae01350514061 day 2 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0x244225eb53b201e2922a8ea0512410d84d05f23f02f1e815a73fb3df2e7f423250485971 day 12 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.001147314 Ether
0x244225eb53b201e2922a8ea0512410d84d05f23f02f1e815a73fb3df2e7f423250485971 day 12 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0x8502f4cf703a97b50dc9d06abaca66e874549d7b9f501c830be497e32cfec48f50462591 day 21 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.00310018 Ether
0x8502f4cf703a97b50dc9d06abaca66e874549d7b9f501c830be497e32cfec48f50462591 day 21 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0xe41fc0cefc8433cd7a611ae42ec56ae1d2c228cc647eee778bf120ebee57d2e050462581 day 21 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x833a2fa19349daf085b94376ac3042197cf664430.1 Ether
0x179276f43784104d183251f4b4a903232c960d90e49d4b8a9d64ac76fc5e43da50462581 day 21 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.000004396 Ether
0x179276f43784104d183251f4b4a903232c960d90e49d4b8a9d64ac76fc5e43da50462581 day 21 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0x7ecf06d3d9e4fafd87bbdfc67b62f6d0b9e6b7ee15c07de83d965e3db257617250457181 day 23 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xd8ada5c29785f5e486bba48bd196b103d58bbca50.1 Ether
0x29e0b0ac7a685f3b4f28a613c7ab976ed800bb434a3842329059bc25e3a90d8550449592 days 2 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x72402058ea385fa9900ae16abd3459f9d0fa05bf0 Ether
0x29e0b0ac7a685f3b4f28a613c7ab976ed800bb434a3842329059bc25e3a90d8550449592 days 2 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x72402058ea385fa9900ae16abd3459f9d0fa05bf0 Ether
0x29e0b0ac7a685f3b4f28a613c7ab976ed800bb434a3842329059bc25e3a90d8550449592 days 2 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x72402058ea385fa9900ae16abd3459f9d0fa05bf0 Ether
0x9f94c275cb4cc589f76c547f7f7891c3566f08e0973922fa4032fb17fa30e4d150402662 days 17 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.0000218 Ether
0x9f94c275cb4cc589f76c547f7f7891c3566f08e0973922fa4032fb17fa30e4d150402662 days 17 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0xc59a6fcb3aae6aeb1841190b53e62268e41a645ff868f5acf644b6ec40e60a7a50396812 days 19 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.0060872482 Ether
0xc59a6fcb3aae6aeb1841190b53e62268e41a645ff868f5acf644b6ec40e60a7a50396812 days 19 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0xa3258f7738a393980502ffe969dc0c20f99f3b8bd6ac760c6e5e740de053fe8e50249605 days 3 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.0005972532 Ether
0xa3258f7738a393980502ffe969dc0c20f99f3b8bd6ac760c6e5e740de053fe8e50249605 days 3 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0xccce229b9b0c2ed826439d60fd774f0b74b97d5fb8b828de2e5301b8ba437cc150245755 days 4 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x833a2fa19349daf085b94376ac3042197cf664431 Ether
0x021461fc7f4c87de2a6419b82974079d251663c040a595d75a9568db8895b8b850244635 days 4 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500x833a2fa19349daf085b94376ac3042197cf664430.1 Ether
0x5265a18836cd873de6b223133593890f19e91e66e8708d0a9529e293009f0f3350155246 days 14 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.0000503888 Ether
0x5265a18836cd873de6b223133593890f19e91e66e8708d0a9529e293009f0f3350155246 days 14 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 Ether
0xc069936b0591d174b172ca60abd25902b1431d387fbe1492a87aad62a42648c450150516 days 15 hrs ago0xf2973854948298f29737ebacfdf4946a07cd60500xba56a393b956e501b5f0bc30505e4fef80e1d29a0.000089807 Ether
0xc069936b0591d174b172ca60abd25902b1431d387fbe1492a87aad62a42648c450150516 days 15 hrs ago0xba56a393b956e501b5f0bc30505e4fef80e1d29a0xf2973854948298f29737ebacfdf4946a07cd60500 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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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.9Poa8ZoW/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
60806040526000805460ff191660011790556200002464010000000062000367810204565b805180516003805460208085015160408087015160609788015160ff1995861660ff9889161761ff0019908116610100958a1686021762ff00001990811662010000948b1685021763ff000000199081166301000000948c168502179099559a860151805160048054988301519683015192909c015197909816978a16979097171692881690930291909117909716928516909602919091179091169116909202919091179055600060065543601355348015620000e157600080fd5b50604051620051d2380380620051d2833981018060405260a08110156200010757600080fd5b8101908080516401000000008111156200012057600080fd5b820160208101848111156200013457600080fd5b81518560208202830111640100000000821117156200015257600080fd5b505060208201516040830151606084015160809094018051939692959194936401000000008111156200018457600080fd5b820160208101848111156200019857600080fd5b8151640100000000811182820187101715620001b357600080fd5b50909350839250879150600090505b81518110156200020757620001fe8282815181101515620001df57fe5b90602001906020020151620003d3640100000000026401000000009004565b600101620001c2565b5080516200021d906002906020840190620004fd565b505080516200023490600590602084019062000567565b50849050600160a060020a0381161515620002b057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b83600160a060020a03811615156200032957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b505060078054600160a060020a03948516600160a060020a0319918216179091556008805495909416941693909317909155601255506200067e9050565b62000371620005e8565b506040805160c081018252600381830181815260608084018390526004608080860191909152600660a0860152918452845191820185529181526007602082810191909152600a94820194909452601191810191909152918101919091525b90565b80600160a060020a03811615156200044c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602052604090205460ff161515620004f957600160a060020a0382166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054600160a060020a03191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25b5050565b82805482825590600052602060002090810192821562000555579160200282015b82811115620005555782518254600160a060020a031916600160a060020a039091161782556020909201916001909101906200051e565b506200056392915062000613565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620005aa57805160ff1916838001178555620005da565b82800160010185558215620005da579182015b82811115620005da578251825591602001919060010190620005bd565b50620005639291506200063a565b61010060405190810160405280620005ff62000657565b81526020016200060e62000657565b905290565b620003d091905b8082111562000563578054600160a060020a03191681556001016200061a565b620003d091905b8082111562000563576000815560010162000641565b60408051608081018252600080825260208201819052918101829052606081019190915290565b614b44806200068e6000396000f3fe6080604052600436106102a5576000357c0100000000000000000000000000000000000000000000000000000000900480637065cb4811610177578063bf0af1ba116100de578063ebf5906811610097578063ebf590681461115e578063ee849630146112d1578063f10e482f146112fb578063f617a32d14611325578063fb4416631461134f578063ffbc9bd0146114c2576102a5565b8063bf0af1ba14610fd1578063c8a8ac2e14611089578063da9b2958146110c5578063e13c96a91461110a578063e1a41bcf1461111f578063e58c967714611134576102a5565b8063985bcf3411610130578063985bcf3414610e2e57806398ea5fca14610e585780639a8e896314610e60578063a0e67e2b14610f18578063aca2500d14610f7d578063be3fe19714610fa7576102a5565b80637065cb4814610d685780637b10399914610d9b57806380de7f9114610db05780638322fff214610dc557806387b5ac0514610dda5780638d670aa714610e04576102a5565b8063338b5dea1161021b5780634732fb02116101d45780634732fb021461097a5780634cbd7a26146109ca57806354fd4d5014610b3d578063570ca73514610bc757806358f4996f14610bf857806361b9e2bb14610cb0576102a5565b8063338b5dea146107df5780633823d66c1461081857806338da5b07146108425780633d4dff7b14610900578063413350bd1461092a578063416982351461093f576102a5565b8063173825d91161026d578063173825d914610656578063175bbecf146106895780631a74d5361461069e57806323a27bcd146106d95780632e8ff5bd146107975780632f54bf6e146107ac576102a5565b8063038d71ee146102b3578063057c824f146102c857806306ba9aa7146103945780630b8514b9146103bb57806314f1244c1461043f575b6102b1336000346114d7565b005b3480156102bf57600080fd5b506102b16115c3565b3480156102d457600080fd5b50610380600480360360608110156102eb57600080fd5b81019060208101813564010000000081111561030657600080fd5b82018360208201111561031857600080fd5b8035906020019184600183028401116401000000008311171561033a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013561166b565b604080519115158252519081900360200190f35b3480156103a057600080fd5b506103a96116a2565b60408051918252519081900360200190f35b3480156103c757600080fd5b506102b1600480360360608110156103de57600080fd5b8135919081019060408101602082013564010000000081111561040057600080fd5b82018360208201111561041257600080fd5b8035906020019184600183028401116401000000008311171561043457600080fd5b9193509150356116a8565b34801561044b57600080fd5b506102b1600480360360c081101561046257600080fd5b81019060208101813564010000000081111561047d57600080fd5b82018360208201111561048f57600080fd5b803590602001918460208302840111640100000000831117156104b157600080fd5b9193909290916020810190356401000000008111156104cf57600080fd5b8201836020820111156104e157600080fd5b8035906020019184602083028401116401000000008311171561050357600080fd5b91939092909160208101903564010000000081111561052157600080fd5b82018360208201111561053357600080fd5b8035906020019184602083028401116401000000008311171561055557600080fd5b91939092909160208101903564010000000081111561057357600080fd5b82018360208201111561058557600080fd5b803590602001918460208302840111640100000000831117156105a757600080fd5b9193909290916020810190356401000000008111156105c557600080fd5b8201836020820111156105d757600080fd5b803590602001918460018302840111640100000000831117156105f957600080fd5b91939092909160208101903564010000000081111561061757600080fd5b82018360208201111561062957600080fd5b8035906020019184600183028401116401000000008311171561064b57600080fd5b5090925090506119fe565b34801561066257600080fd5b506102b16004803603602081101561067957600080fd5b5035600160a060020a0316611cbf565b34801561069557600080fd5b50610380611ed6565b3480156106aa57600080fd5b50610380600480360360408110156106c157600080fd5b50600160a060020a0381358116916020013516611edf565b3480156106e557600080fd5b50610380600480360360808110156106fc57600080fd5b81019060208101813564010000000081111561071757600080fd5b82018360208201111561072957600080fd5b8035906020019184600183028401116401000000008311171561074b57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060208101359060400135611f0f565b3480156107a357600080fd5b506103a96120ea565b3480156107b857600080fd5b50610380600480360360208110156107cf57600080fd5b5035600160a060020a03166120ef565b3480156107eb57600080fd5b506102b16004803603604081101561080257600080fd5b50600160a060020a038135169060200135612104565b34801561082457600080fd5b506103806004803603602081101561083b57600080fd5b503561239b565b34801561084e57600080fd5b506103806004803603608081101561086557600080fd5b81019060208101813564010000000081111561088057600080fd5b82018360208201111561089257600080fd5b803590602001918460018302840111640100000000831117156108b457600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602081013590604001356123b0565b34801561090c57600080fd5b506103806004803603602081101561092357600080fd5b50356123c7565b34801561093657600080fd5b506103a96123dc565b34801561094b57600080fd5b506103806004803603604081101561096257600080fd5b50600160a060020a03813581169160200135166123e2565b34801561098657600080fd5b506109a46004803603602081101561099d57600080fd5b5035612402565b604080519485526020850193909352838301919091526060830152519081900360800190f35b3480156109d657600080fd5b506102b1600480360360a08110156109ed57600080fd5b810190602081018135640100000000811115610a0857600080fd5b820183602082011115610a1a57600080fd5b80359060200191846020830284011164010000000083111715610a3c57600080fd5b919390929091602081019035640100000000811115610a5a57600080fd5b820183602082011115610a6c57600080fd5b80359060200191846020830284011164010000000083111715610a8e57600080fd5b919390929091602081019035640100000000811115610aac57600080fd5b820183602082011115610abe57600080fd5b80359060200191846001830284011164010000000083111715610ae057600080fd5b919390929091602081019035640100000000811115610afe57600080fd5b820183602082011115610b1057600080fd5b80359060200191846001830284011164010000000083111715610b3257600080fd5b919350915035612429565b348015610b4957600080fd5b50610b52612756565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610b8c578181015183820152602001610b74565b50505050905090810190601f168015610bb95780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610bd357600080fd5b50610bdc6127e4565b60408051600160a060020a039092168252519081900360200190f35b348015610c0457600080fd5b5061038060048036036060811015610c1b57600080fd5b810190602081018135640100000000811115610c3657600080fd5b820183602082011115610c4857600080fd5b80359060200191846001830284011164010000000083111715610c6a57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356127f3565b348015610cbc57600080fd5b5061038060048036036060811015610cd357600080fd5b810190602081018135640100000000811115610cee57600080fd5b820183602082011115610d0057600080fd5b80359060200191846001830284011164010000000083111715610d2257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295505082359350505060200135612800565b348015610d7457600080fd5b506102b160048036036020811015610d8b57600080fd5b5035600160a060020a0316612829565b348015610da757600080fd5b50610bdc61289b565b348015610dbc57600080fd5b506103a96128aa565b348015610dd157600080fd5b50610bdc6128af565b348015610de657600080fd5b5061038060048036036020811015610dfd57600080fd5b50356128b4565b348015610e1057600080fd5b506103a960048036036020811015610e2757600080fd5b50356128c8565b348015610e3a57600080fd5b5061038060048036036020811015610e5157600080fd5b50356128da565b6102b1612910565b348015610e6c57600080fd5b5061038060048036036060811015610e8357600080fd5b810190602081018135640100000000811115610e9e57600080fd5b820183602082011115610eb057600080fd5b80359060200191846001830284011164010000000083111715610ed257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550508235935050506020013561291c565b348015610f2457600080fd5b50610f2d612939565b60408051602080825283518183015283519192839290830191858101910280838360005b83811015610f69578181015183820152602001610f51565b505050509050019250505060405180910390f35b348015610f8957600080fd5b506103a960048036036020811015610fa057600080fd5b503561299c565b348015610fb357600080fd5b5061038060048036036020811015610fca57600080fd5b50356129ae565b348015610fdd57600080fd5b5061038060048036036060811015610ff457600080fd5b81019060208101813564010000000081111561100f57600080fd5b82018360208201111561102157600080fd5b8035906020019184600183028401116401000000008311171561104357600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955050823593505050602001356129c6565b34801561109557600080fd5b506102b1600480360360808110156110ac57600080fd5b5080359060208101359060408101359060600135612ac8565b3480156110d157600080fd5b506102b1600480360360808110156110e857600080fd5b50600160a060020a038135169060208101359060408101359060600135612ced565b34801561111657600080fd5b506103a9612db2565b34801561112b57600080fd5b506103a9612db8565b34801561114057600080fd5b506103806004803603602081101561115757600080fd5b5035612dbe565b34801561116a57600080fd5b506102b1600480360360a081101561118157600080fd5b81019060208101813564010000000081111561119c57600080fd5b8201836020820111156111ae57600080fd5b803590602001918460208302840111640100000000831117156111d057600080fd5b9193909290916020810190356401000000008111156111ee57600080fd5b82018360208201111561120057600080fd5b8035906020019184602083028401116401000000008311171561122257600080fd5b91939092909160208101903564010000000081111561124057600080fd5b82018360208201111561125257600080fd5b8035906020019184600183028401116401000000008311171561127457600080fd5b91939092909160208101903564010000000081111561129257600080fd5b8201836020820111156112a457600080fd5b803590602001918460018302840111640100000000831117156112c657600080fd5b919350915035612dd5565b3480156112dd57600080fd5b50610380600480360360208110156112f457600080fd5b503561300e565b34801561130757600080fd5b506103806004803603602081101561131e57600080fd5b5035613025565b34801561133157600080fd5b506103a96004803603602081101561134857600080fd5b503561303a565b34801561135b57600080fd5b506102b1600480360360a081101561137257600080fd5b81019060208101813564010000000081111561138d57600080fd5b82018360208201111561139f57600080fd5b803590602001918460208302840111640100000000831117156113c157600080fd5b9193909290916020810190356401000000008111156113df57600080fd5b8201836020820111156113f157600080fd5b8035906020019184602083028401116401000000008311171561141357600080fd5b91939092909160208101903564010000000081111561143157600080fd5b82018360208201111561144357600080fd5b8035906020019184600183028401116401000000008311171561146557600080fd5b91939092909160208101903564010000000081111561148357600080fd5b82018360208201111561149557600080fd5b803590602001918460018302840111640100000000831117156114b757600080fd5b91935091503561304c565b3480156114ce57600080fd5b50610380613468565b60005460ff161515611521576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b6006805460010190819055600d5460030161153a614692565b6115478686868686613471565b60a0810151600090815260096020908152604091829020805460ff1916600117905581518781529081018690528082018590529051919250600160a060020a03808816929089169130917fe1d62a717c13e8309c9a6a54be6a5f04d7fad0018f9c736406cf50fbe6adf4de9181900360600190a4505050505050565b3360009081526001602052604090205460ff16151561162c576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b60005460ff1615611669576000805460ff191681556040517f369554cf721939830e3356301e1150520b7a57198eaabd24211952c158f3ba4e9190a15b565b600d54600019016000908152600e60205260408120600301548314801561169857506116988484846127f3565b90505b9392505050565b60065481565b60005460ff1615156116f2576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b6116fa6146c7565b6000858152600b60205260409081902081516101c081018352815490928391908201908390829060ff16600681111561172f57fe5b600681111561173a57fe5b815260018201546020808301919091526002830154604080840191909152600384015460608401526004840154600160a060020a03908116608085015260058501541660a0840152600684015460c0840152600784015460e084015260088401546101008401526009840180548251818502810185019093528083526101209094019391929091908301828280156117fb57602002820191906000526020600020905b8154600160a060020a031681526001909101906020018083116117dd575b50505050508152602001600a820180548060200260200160405190810160405280929190818152602001828054801561185357602002820191906000526020600020905b81548152602001906001019080831161183f575b50505050508152602001600b820154815250508152602001600c82015481525050905061187f856128da565b15156118bf5760405160e560020a62461bcd0281526004018080602001828103825260448152602001806149036044913960600191505060405180910390fd5b61190284848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508692508991506128009050565b1515611958576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b6000858152600b60205260408120805460ff19168155600181018290556002810182905560038101829055600481018054600160a060020a031990811690915560058201805490911690556006810182905560078101829055600881018290559081816119c860098301826146e9565b6119d6600a830160006146e9565b600b8201600090555050600c82016000905550506119f78160000151613508565b5050505050565b611a06614707565b611b5f8d8d80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508c8c80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050508b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d91829185019084908082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b908190840183828082843760009201919091525050604080516020601f8d018190048102820181019092528b815292508b91508a908190840183828082843760009201919091525061361992505050565b9050611b69614692565b5080518051600160a060020a03163314611bb75760405160e560020a62461bcd02815260040180806020018281038252602781526020018061498d6027913960400191505060405180910390fd5b8060800151600d54118015611bcf5750608081015115155b1515611c0f5760405160e560020a62461bcd02815260040180806020018281038252602b815260200180614ab0602b913960400191505060405180910390fd5b611c1761473b565b506080808201516000908152600e602090815260409182902082519384018352805484526001810154918401919091526002810154918301829052600301546060830152611c6590846136e0565b1515611ca55760405160e560020a62461bcd0281526004018080602001828103825260248152602001806149696024913960400191505060405180910390fd5b611cae82613741565b505050505050505050505050505050565b3360009081526001602052604090205460ff161515611d28576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b600160a060020a03811660009081526001602052604090205460ff1615611ed357600254600110611d8d5760405160e560020a62461bcd028152600401808060200182810382526026815260200180614a206026913960400191505060405180910390fd5b600160a060020a0381166000908152600160205260408120805460ff191690555b60025460001901811015611e895781600160a060020a0316600282815481101515611dd557fe5b600091825260209091200154600160a060020a03161415611e8157600280546000198101908110611e0257fe5b60009182526020909120015460028054600160a060020a039092169183908110611e2857fe5b60009182526020909120018054600160a060020a031916600160a060020a0392909216919091179055600280546000198101908110611e6357fe5b60009182526020909120018054600160a060020a0319169055611e89565b600101611dae565b50600280546000190190611e9d9082614762565b50604051600160a060020a038216907f58619076adf5bb0943d100ef88d52d7c3fd691b19d3a9071b555b651fbf418da90600090a25b50565b60005460ff1681565b600160a060020a038083166000908152600c602090815260408083209385168352929052205460ff165b92915050565b8351600090601f1615611f24575060006120e2565b6000838160205b885181116120da578089015193506020818a5103602001811515611f4b57fe5b0491505b600082118015611f625750600286066001145b8015611f7057508160020a86115b15611f8357600286046001019550611f4f565b6002860615156120305760408051602080820187905281830186905282518083038401815260608301909352825160809092019182918401908083835b60208310611fdf5780518252601f199092019160209182019101611fc0565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120925060028681151561202857fe5b0495506120d2565b60408051602080820186905281830187905282518083038401815260608301909352825160809092019182918401908083835b602083106120825780518252601f199092019160209182019101612063565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012092506002868115156120cb57fe5b0460010195505b602001611f2b565b505085149150505b949350505050565b600381565b60016020526000908152604090205460ff1681565b81600160a060020a038116151561214f5760405160e560020a62461bcd0281526004018080602001828103825260298152602001806149d76029913960400191505060405180910390fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038616916370a0823191602480820192602092909190829003018186803b1580156121b257600080fd5b505afa1580156121c6573d6000803e3d6000fd5b505050506040513d60208110156121dc57600080fd5b5051604080517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018690529051919250600160a060020a038616916323b872dd916064808201926020929091908290030181600087803b15801561225057600080fd5b505af1158015612264573d6000803e3d6000fd5b505050506040513d602081101561227a57600080fd5b505115156122bc5760405160e560020a62461bcd028152600401808060200182810382526027815260200180614a466027913960400191505060405180910390fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529051600091600160a060020a038716916370a0823191602480820192602092909190829003018186803b15801561231f57600080fd5b505afa158015612333573d6000803e3d6000fd5b505050506040513d602081101561234957600080fd5b5051905081810384146123905760405160e560020a62461bcd028152600401808060200182810382526043815260200180614a6d6043913960600191505060405180910390fd5b6119f73386866114d7565b600a6020526000908152604090205460ff1681565b60006123be85858585611f0f565b95945050505050565b60096020526000908152604090205460ff1681565b60135481565b600c60209081526000928352604080842090915290825290205460ff1681565b600e6020526000908152604090208054600182015460028301546003909301549192909184565b612431614786565b61249e8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b90506124f281610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a031633146125405760405160e560020a62461bcd0281526004018080602001828103825260228152602001806149476022913960400191505060405180910390fd5b60038151600681111561254f57fe5b146125a4576040805160e560020a62461bcd02815260206004820181905260248201527f656e747279206d757374206265206f662074797065205769746864726177616c604482015290519081900360640190fd5b6125ea84848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061291c565b1515612640576040805160e560020a62461bcd02815260206004820152601360248201527f696e76616c696420656e7472792070726f6f6600000000000000000000000000604482015290519081900360640190fd5b6101608101516000908152600a602052604090205460ff16156126ad576040805160e560020a62461bcd02815260206004820152601760248201527f656e74727920616c72656164792077697468647261776e000000000000000000604482015290519081900360640190fd5b6101608101516000908152600a60205260409020805460ff1916600117905560c081015160a082015160808301516126e6929190613a65565b8060a00151600160a060020a03168160800151600160a060020a03167fa6786aab7dbbc48b4b0387488b407bd81448030ab207b50bea7dbb5fbc1cd9eb8361016001518460c00151604051808381526020018281526020019250505060405180910390a350505050505050505050565b6005805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156127dc5780601f106127b1576101008083540402835291602001916127dc565b820191906000526020600020905b8154815290600101906020018083116127bf57829003601f168201915b505050505081565b600754600160a060020a031681565b60006116988484846129c6565b600d546000908152600e60205260408120600301548314801561169857506116988484846127f3565b3360009081526001602052604090205460ff161515612892576040805160e560020a62461bcd02815260206004820152601d60248201527f696e76616c69642073656e6465723b206d757374206265206f776e6572000000604482015290519081900360640190fd5b611ed381613bf2565b600854600160a060020a031681565b600581565b600081565b600090815260106020526040902054151590565b60116020526000908152604090205481565b6000818152600b60205260408120600c015415801590611f095750506000908152600b60205260409020600c0154600d54101590565b611669336000346114d7565b6000612927836129ae565b801561169857506116988484846127f3565b6060600280548060200260200160405190810160405280929190818152602001828054801561299157602002820191906000526020600020905b8154600160a060020a03168152600190910190602001808311612973575b505050505090505b90565b60106020526000908152604090205481565b600081815260106020526040812054611f0990613025565b8251600090601f16156129db5750600061169b565b8360008360205b87518111612abb57808401519250828210612a1e5760408051602081018590528082018490528151808203830181526060909101909152612a41565b604080516020810184905280820185905281518082038301815260609091019091525b6040516020018082805190602001908083835b60208310612a735780518252601f199092019160209182019101612a54565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012091506020810190506129e2565b5090941495945050505050565b60005460ff161515612b12576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b612b1a613468565b1515612b70576040805160e560020a62461bcd02815260206004820152601160248201527f63616e6e6f74207375626d697420796574000000000000000000000000000000604482015290519081900360640190fd5b600754600160a060020a03163314612bd2576040805160e560020a62461bcd02815260206004820152601e60248201527f7375626d6974746572206d75737420626520746865206f70657261746f720000604482015290519081900360640190fd5b600d546001018414612c185760405160e560020a62461bcd0281526004018080602001828103825260238152602001806149b46023913960400191505060405180910390fd5b612c2061473b565b5060408051608081810183528682526020808301878152838501878152606080860188815260008c8152600e865288812088518155945160018601559251600285015551600390930192909255878152600f83528581208a9055888152601083528581208a905586815260118352859020899055600d899055601254430160135584518981529182018890528185018790528101859052925191927f0f1e10d65da94fe52cbe318a976fc653ab247aa5c0768c12a34e2353b1eb6ab4929081900390910190a15050505050565b60005460ff1615612d48576040805160e560020a62461bcd02815260206004820152600b60248201527f6d757374206265206f6666000000000000000000000000000000000000000000604482015290519081900360640190fd5b612d50614692565b612d5d3386868686613471565b9050600d54816080015110151515612da95760405160e560020a62461bcd02815260040180806020018281038252603e815260200180614adb603e913960400191505060405180910390fd5b6119f781613741565b600d5481565b60125481565b600d54600091825260106020526040909120541490565b60005460ff1615612e30576040805160e560020a62461bcd02815260206004820152600b60248201527f6d757374206265206f6666000000000000000000000000000000000000000000604482015290519081900360640190fd5b612e38614786565b612ea58a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b9050612ef981610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a03163314612f5d576040805160e560020a62461bcd02815260206004820181905260248201527f636c61696d616e74206d75737420626520656e7472792773206163636f756e74604482015290519081900360640190fd5b612fa384848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061166b565b1515612ff9576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b61300281613508565b50505050505050505050565b600d54600091825260116020526040909120541490565b6000816000108015611f09575050600d541190565b600f6020526000908152604090205481565b60005460ff161515613096576040805160e560020a62461bcd02815260206004820152600a6024820152600080516020614a00833981519152604482015290519081900360640190fd5b61309e614786565b61310b8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c91829185019084908082843760009201919091525061385292505050565b905061315f81610160015187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050600754600160a060020a031691506139ee9050565b6080810151600160a060020a031633146131c3576040805160e560020a62461bcd02815260206004820181905260248201527f636c61696d616e74206d75737420626520656e7472792773206163636f756e74604482015290519081900360640190fd5b6131d581608001518260a00151611edf565b1561322a576040805160e560020a62461bcd02815260206004820152601160248201527f70726576696f75736c7920657869746564000000000000000000000000000000604482015290519081900360640190fd5b61327084848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505061016084015185915061166b565b15156132c6576040805160e560020a62461bcd02815260206004820152601560248201527f696e76616c69642062616c616e63652070726f6f660000000000000000000000604482015290519081900360640190fd5b600d54604080518082018252838152600590920160208084018290526101608501516000908152600b90915291909120825180518254939493839190829060ff1916600183600681111561331657fe5b0217905550602082810151600183015560408301516002830155606083015160038301556080830151600483018054600160a060020a03928316600160a060020a03199182161790915560a085015160058501805491909316911617905560c0830151600683015560e08301516007830155610100830151600883015561012083015180516133ab92600985019201906147fd565b5061014082015180516133c891600a840191602090910190614862565b5061016082015181600b01555050602082015181600c01559050508160a00151600160a060020a03168260800151600160a060020a03167f033fd1dc81f5c58d2987171bd5432008ce60e028fd6b687900ef31dcbeee03348461016001518560e001518660400151866040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050505050505050565b60135443101590565b613479614692565b600160a060020a039586168082529490951660208087018290526040808801869052606088018590526080880184905280516c01000000000000000000000000308102828501529788026034820152969092026048870152605c860194909452607c850192909252609c808501919091528151808503909101815260bc9093019052815191012060a082015290565b61351a81608001518260a00151611edf565b1561356f576040805160e560020a62461bcd02815260206004820152601160248201527f70726576696f75736c7920657869746564000000000000000000000000000000604482015290519081900360640190fd5b608081018051600160a060020a039081166000908152600c6020908152604080832060a08701805190951684529091529020805460ff1916600117905560e0830151905191516135bf9290613a65565b8060a00151600160a060020a03168160800151600160a060020a03167f104ad9ab27213fcc307f2308fc015959def8986f04d9475d82c5f32ab9c8d83b8360e001516040518082815260200191505060405180910390a350565b613621614707565b61362b8787613d03565b81526040805160608101909152855181908790600090811061364957fe5b90602001906020020151815260200185600081518110151561366757fe5b90602001906020020151815260200184815250816020018190525060606040519081016040528086600181518110151561369d57fe5b9060200190602002015181526020018560018151811015156136bb57fe5b9060200190602002015181526020018381525081604001819052509695505050505050565b600081602001516020015160010182604001516020015114801561371d575060208083015160408101518151919092015161371d929186916123b0565b801561169b575060408083015190810151815160209092015161169b9286916123b0565b60a081015160009081526009602052604090205460ff1615156137ae576040805160e560020a62461bcd02815260206004820152600f60248201527f756e6b6e6f776e206465706f7369740000000000000000000000000000000000604482015290519081900360640190fd5b60a0810151600090815260096020908152604091829020805460ff19169055908201519082015182516137e2929190613a65565b8060200151600160a060020a03168160000151600160a060020a031630600160a060020a03167fcae41644ed0b3c3127d183a2914bded089d52603e835f1cd7ae830d7803cd03384604001518560600151604051808381526020018281526020019250505060405180910390a450565b61385a614786565b3083600081518110151561386a57fe5b600160a060020a0390921660209283029091019091015282518390600190811061389057fe5b60209081029091010151600160a060020a031660808201528251839060029081106138b757fe5b60209081029091010151600160a060020a031660a08201528151829060009081106138de57fe5b9060200190602002015160068111156138f357fe5b8190600681111561390057fe5b9081600681111561390d57fe5b90525081518290600190811061391f57fe5b60209081029091018101519082015281518290600290811061393d57fe5b60209081029091010151604082015281518290600390811061395b57fe5b60209081029091010151606082015281518290600490811061397957fe5b6020908102909101015160c082015281518290600590811061399757fe5b6020908102909101015160e08201528151829060069081106139b557fe5b602090810290910101516101008201526101208101839052610140810182905280516139e2908484613d90565b61016082015292915050565b80600160a060020a0316613a028484613e4e565b600160a060020a031614613a60576040805160e560020a62461bcd02815260206004820152601a60248201527f6661696c656420746f20766572696679207369676e6174757265000000000000604482015290519081900360640190fd5b505050565b600160a060020a03821615613b775781600160a060020a031663a9059cbb82856040518363ffffffff167c01000000000000000000000000000000000000000000000000000000000281526004018083600160a060020a0316600160a060020a0316815260200182815260200192505050602060405180830381600087803b158015613af057600080fd5b505af1158015613b04573d6000803e3d6000fd5b505050506040513d6020811015613b1a57600080fd5b50511515613b72576040805160e560020a62461bcd02815260206004820152601860248201527f6661696c656420746f207472616e7366657220746f6b656e0000000000000000604482015290519081900360640190fd5b613a60565b604051600160a060020a0382169084156108fc029085906000818181858888f193505050501515613a60576040805160e560020a62461bcd02815260206004820152601860248201527f6661696c656420746f207472616e736665722065746865720000000000000000604482015290519081900360640190fd5b80600160a060020a0381161515613c53576040805160e560020a62461bcd02815260206004820152600f60248201527f696e76616c696420616464726573730000000000000000000000000000000000604482015290519081900360640190fd5b600160a060020a03821660009081526001602052604090205460ff161515613cff57600160a060020a0382166000818152600160208190526040808320805460ff19168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace9091018054600160a060020a03191684179055517f994a936646fe87ffe4f1e469d3d6aa417d6b855598397f323de5b449f765f0c39190a25b5050565b613d0b614692565b61169b836001815181101515613d1d57fe5b90602001906020020151846002815181101515613d3657fe5b90602001906020020151846000815181101515613d4f57fe5b90602001906020020151856001815181101515613d6857fe5b90602001906020020151866002815181101515613d8157fe5b90602001906020020151613471565b600080613d9d8484613f1f565b90506000613dac8686866140a6565b9050818160405160200180838152602001828152602001925050506040516020818303038152906040526040516020018082805190602001908083835b60208310613e085780518252601f199092019160209182019101613de9565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405280519060200120925050509392505050565b60008060008084516041141515613e6b5760009350505050611f09565b50505060208201516040830151606084015160001a601b60ff82161015613e9057601b015b8060ff16601b14158015613ea857508060ff16601c14155b613f12576040805160008152602080820180845289905260ff8416828401526060820186905260808201859052915160019260a0808401939192601f1981019281900390910190855afa158015613f03573d6000803e3d6000fd5b50505060206040510351613f15565b60005b9695505050505050565b6000826000815181101515613f3057fe5b90602001906020020151836001815181101515613f4957fe5b90602001906020020151846002815181101515613f6257fe5b90602001906020020151846000815181101515613f7b57fe5b90602001906020020151856001815181101515613f9457fe5b90602001906020020151866002815181101515613fad57fe5b90602001906020020151876003815181101515613fc657fe5b90602001906020020151886004815181101515613fdf57fe5b90602001906020020151896005815181101515613ff857fe5b906020019060200201518a600681518110151561401157fe5b6020908102909101810151604080516c01000000000000000000000000600160a060020a039d8e168102828601529b8d168c02603482015299909b169099026048890152605c880196909652607c870194909452609c86019290925260bc85015260dc84015260fc83015261011c808301939093528351808303909301835261013c9091019092528051910120905092915050565b600060028460068111156140b657fe5b14156140cc576140c5826141b5565b905061169b565b60038460068111156140da57fe5b14156140ea576140c58383614237565b60058460068111156140f857fe5b148061410f5750600684600681111561410d57fe5b145b1561411e576140c58383614355565b6000604051602001808281526020019150506040516020818303038152906040526040516020018082805190602001908083835b602083106141715780518252601f199092019160209182019101614152565b6001836020036101000a0380198251168184511680821785525050505050509050019150506040516020818303038152906040528051906020012090509392505050565b6004548151600091839161010090910460ff169081106141d157fe5b602090810290910101516004548351849160ff6101009091048116600101169081106141f957fe5b906020019060200201516040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209050919050565b6003548251600091849161010090910460ff1690811061425357fe5b602090810290910101516003548451859160ff61010090910481166001011690811061427b57fe5b602090810290910101516004548451859160ff6101009091041690811061429e57fe5b602090810290910101516004548551869160ff6101009091048116600101169081106142c657fe5b906020019060200201516040516020018085600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140184600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140183815260200182815260200194505050505060405160208183030381529060405280519060200120905092915050565b60035460045460009161437b918591859160ff6101009283900481169290910416614402565b6003546004546143a0918691869160ff620100009182900481169291909104166144dd565b6003546004546143c6918791879160ff63010000009182900481169291909104166144dd565b60405160200180848152602001838152602001828152602001935050505060405160208183030381529060405280519060200120905092915050565b8351600090859060ff851690811061441657fe5b602090810290910101518451859060ff851690811061443157fe5b90602001906020020151858460010160ff1681518110151561444f57fe5b90602001906020020151868560020160ff1681518110151561446d57fe5b906020019060200201516040516020018085600160a060020a0316600160a060020a03166c01000000000000000000000000028152601401848152602001838152602001828152602001945050505050604051602081830303815290604052805190602001209050949350505050565b8351600090859060ff85169081106144f157fe5b90602001906020020151858460010160ff1681518110151561450f57fe5b602090810290910101518551869060ff861690811061452a57fe5b90602001906020020151868560010160ff1681518110151561454857fe5b90602001906020020151878660020160ff1681518110151561456657fe5b90602001906020020151888760030160ff1681518110151561458457fe5b90602001906020020151898860040160ff168151811015156145a257fe5b906020019060200201518a8960050160ff168151811015156145c057fe5b906020019060200201518b8a60060160ff168151811015156145de57fe5b90602001906020020151604051602001808a600160a060020a0316600160a060020a03166c0100000000000000000000000002815260140189600160a060020a0316600160a060020a03166c010000000000000000000000000281526014018881526020018781526020018681526020018581526020018481526020018381526020018281526020019950505050505050505050604051602081830303815290604052805190602001209050949350505050565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a081019190915290565b6101a0604051908101604052806146dc614786565b8152602001600081525090565b5080546000825590600052602060002090810190611ed391906148a5565b6101806040519081016040528061471c614692565b81526020016147296148bf565b81526020016147366148bf565b905290565b60408051608081018252600080825260208201819052918101829052606081019190915290565b815481835581811115613a6057600083815260209020613a609181019083016148a5565b60408051610180810190915280600081526020016000815260200160008152602001600081526020016000600160a060020a031681526020016000600160a060020a031681526020016000815260200160008152602001600081526020016060815260200160608152602001600080191681525090565b828054828255906000526020600020908101928215614852579160200282015b828111156148525782518254600160a060020a031916600160a060020a0390911617825560209092019160019091019061481d565b5061485e9291506148de565b5090565b82805482825590600052602060002090810192821561489d579160200282015b8281111561489d578251825591602001919060010190614882565b5061485e9291505b61299991905b8082111561485e57600081556001016148ab565b6040805160608181018352600080835260208301529181019190915290565b61299991905b8082111561485e578054600160a060020a03191681556001016148e456fe6e6f207072696f7220636c61696d20666f756e6420746f207769746864726177204f522062616c616e636573206172652079657420746f20626520636f6e6669726d656477697468647261776572206d75737420626520656e7472792773206163636f756e746661696c656420746f2070726f6f66206578636c7573696f6e206f66206465706f736974636c61696d616e74206d75737420626520746865206f726967696e616c206465706f7369746f7267626c6f636b206d75737420626520746865206e65787420696e2073657175656e636576616c7565206d75737420626520612076616c696420455243323020746f6b656e20616464726573736d757374206265206f6e0000000000000000000000000000000000000000000072656d6f76696e6720746865206c617374206f776e6572206973206e6f7420616c6c6f7765646661696c75726520746f207472616e73666572207175616e746974792066726f6d20746f6b656e62616420546f6b656e3b207472616e7366657246726f6d206572726f6e656f75736c79207265706f72746564206f66207375636365737366756c207472616e7366657264657369676e617465642067626c6f636b20697320756e636f6e6669726d6564206f7220756e6b6e6f776e64657369676e617465642067626c6f636b20697320616c726561647920636f6e6669726d65643b2075736520657869744f6e48616c7420696e7374656164a165627a7a72305820825f4f2b560ebd022ce778b5bb59a7d68ad3680bf5ae8fa3d17535f5b746b01f002900000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000da3364d6961ee2ce8f556fc65c23384f50489c60000000000000000000000003a168c9baeaffe3b59e86ccf56877dd832477a5e000000000000000000000000000000000000000000000000000000000000000f00000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000833a2fa19349daf085b94376ac3042197cf66443000000000000000000000000da2cd0bd804c7dba3e732ec6eb0bc6ca8ee04a0c0000000000000000000000000000000000000000000000000000000000000006302e34312e300000000000000000000000000000000000000000000000000000

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

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000000da3364d6961ee2ce8f556fc65c23384f50489c6
Arg [2] : 0000000000000000000000003a168c9baeaffe3b59e86ccf56877dd832477a5e
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 000000000000000000000000833a2fa19349daf085b94376ac3042197cf66443
Arg [7] : 000000000000000000000000da2cd0bd804c7dba3e732ec6eb0bc6ca8ee04a0c
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [9] : 302e34312e300000000000000000000000000000000000000000000000000000


   Swarm Source:
bzzr://825f4f2b560ebd022ce778b5bb59a7d68ad3680bf5ae8fa3d17535f5b746b01f

 

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