Contract 0xdb96f8efd6865644993505318cc08ff9c42fb9ac 2

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe68f5906eca5faf16a12fb14bbe3899e53a2a57e57cd4fcd7d2addc311b63d0eApprove395976912022-11-20 10:18:387 days 4 hrs ago0x1d9a60325cd837f84f42cee66b3beb09ed29a86b IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00019065
0x088650a50a464376b3ee8d7f799e45dfcd004910f380d3897e00488d5d0e4977Approve384758692022-11-16 6:40:4611 days 8 hrs ago0xb93eb3494bd859eee47bde92c97b9dbf70d1469f IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00001848
0x2e475f97eea3a8cda57cd9af7b34e2707dbb6a28a8adf067717a2d1f3379b09cApprove384758632022-11-16 6:40:4311 days 8 hrs ago0xb93eb3494bd859eee47bde92c97b9dbf70d1469f IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00001848
0xca7dcdf03514cf6d1cd56eaad526f1680b99da6313a447025ceae53cf7ea2eb7Approve378498682022-11-13 20:24:4513 days 18 hrs ago0xb90930f12b66c9f849436c6ec143afc894720451 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00002887
0x393ea79363f853a90253005602d4be8b2a3da1817f481a3ec5c55071d54f51afApprove378498492022-11-13 20:24:3713 days 18 hrs ago0xb90930f12b66c9f849436c6ec143afc894720451 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00002887
0xeebf30442f73c30e5c0b52c9d2ab6dc5c2f325efe2f504c0a98b55fddb63d94dApprove372898062022-11-11 18:32:3215 days 20 hrs ago0x291e4ebb46c04d87c2fb10582b20e9258a1a83f8 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003411
0xc5f7688290c0e45363ca1c0246ea85620ed7f2410a495c473bcbfc459d569640Approve372897862022-11-11 18:32:2515 days 20 hrs ago0x291e4ebb46c04d87c2fb10582b20e9258a1a83f8 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003411
0x7f6f532b82e42abb278e461300197765a0b90683dceb95ed6423ae7715a0ac0bApprove367294452022-11-09 21:29:1817 days 17 hrs ago0x5c5abb7047b27c70abec5a840f3d0c4c7759ce8f IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00117869
0x281b76beabc46a1081d4c2d699f546307075e3de1d6d7fa11e622df58ca093afApprove347194242022-11-02 14:27:5325 days 48 mins ago0xb78d5aa80664a45507513522fe48190fe10eb270 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00001797
0x27c081963392fa787a4ac1c87cc97c36215e4616425a9b7c4719f527df484318Approve347077272022-11-02 13:27:2025 days 1 hr ago0x642f2849126aab405724ef3156822a15b5507c86 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00001471
0x3f9882ea6093c865016befdede2fdc61da9b57a56c85b7cc597fa013a9e0bfe9Approve341344252022-10-31 9:49:3227 days 5 hrs ago0x148e89eccc1aabd640880862b46521e362d4d53f IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.0000163
0x4c371a8d3a10eb0ebd845325e1b2b1b8cea0baaf04fe47a246aa6f652c6af952Approve340132032022-10-30 23:18:3527 days 15 hrs ago0xa0f98fc84411f7a46d57ae49458e914d4105ce8a IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00001445
0x27d4d6968121af971eabcf22ebbbe468f0b2d8728fc913aa8d48a1428db9df1eApprove334187982022-10-28 19:06:4329 days 20 hrs ago0x55a1438b4b666c4359909ac902c41be09c3b821a IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003989
0xe07d5976f76c0b6d57f9ad5d8be7742a8587b4f51cfc14f656a345737175c404Approve334187832022-10-28 19:06:3729 days 20 hrs ago0x55a1438b4b666c4359909ac902c41be09c3b821a IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003989
0x4a4cd30df6fbb5435625353cefec5d4d158285ad39258e1d72b9076b3e394541Approve322660352022-10-24 18:04:0533 days 21 hrs ago0x42ca4609546e3c5010d664e6961cc79f6b466e5e IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003949
0x0d3789564fc55394de59fbf7b3cb8bfe55dd46d7666223e87f725e2dca41905cApprove314006972022-10-20 23:21:1237 days 15 hrs ago0xed320bf569e5f3c4e9313391708ddbfc58e296bb IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003921
0xcfb8c410b7ad79d185ae80cdec914159d8c275796433f7c3a095dee3db6526a8Approve314006902022-10-20 23:21:0937 days 15 hrs ago0xed320bf569e5f3c4e9313391708ddbfc58e296bb IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003921
0xf2cc58ccf70acda404395afb44287c061860a31124884d62f5071e90fd0806aaApprove297112232022-10-12 12:40:3846 days 2 hrs ago0x69138ba25a0ad5c07f46c87f71162cc14ad9769b IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00002433
0xfee56d7a8497c6a98a91883e877ece7fc961616f37ea01f6e348fa45fa095d4aApprove295589862022-10-11 12:58:3747 days 2 hrs ago0x3ce8093e028c01073ceb8dc0a020950ae26dfe9a IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00009142
0x8bf9b415cd66ac5c01a237153bdbb0a3b71cdb6f3c021718b03da3100a035c3aApprove292934182022-10-09 16:22:4848 days 22 hrs ago0x2b2b623d5b40e8d5d0932abf4bb383b2b42f69c5 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00003398
0x5d818857abc0f139d4135a270b33613635592ea83c6afeb470c322a4972bf3abApprove288784992022-10-07 11:37:1751 days 3 hrs ago0x75f1694a994c44e714bad6916ef9e223f288364e IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00000813
0xa36921196ca89d7fe37b0dcfb28d4c51060fc9f9765183aa22f42b2b6b3b1d82Approve280472172022-10-02 19:20:1055 days 19 hrs ago0x8879610b84998f8b564949b21effa51c25f92217 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00000858
0x0d9b4bcc6314c3705a2f2fa794923130044dda76da36f85fc03160a9466a93e7Approve280471982022-10-02 19:19:5455 days 19 hrs ago0x8879610b84998f8b564949b21effa51c25f92217 IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00000858
0x3a1b376da3627b740a26cf4fe69f9cb1bb5238612955b6787afe7d249f5dc0e4Approve279284302022-10-02 7:33:0456 days 7 hrs ago0xc4fb550fa8f2a6e5178711e56d5b48dedf897e5e IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00000559
0xb8d86a231d9d025763eacd22a4470a46fd3493f4efb04d2cdeb1af062116c38bApprove279284192022-10-02 7:32:5956 days 7 hrs ago0xc4fb550fa8f2a6e5178711e56d5b48dedf897e5e IN  0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH0.00000559
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x93cb629e7fdb747ab7c385c36eab4453f54c63e3f325563898abcc91151ede01409089972022-11-24 19:34:052 days 19 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x6ab74adbacb04412f05eef92554dee46ffb12fc44ec58a6e726d6fef6e62d1bc395852472022-11-20 9:25:367 days 5 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x6ab74adbacb04412f05eef92554dee46ffb12fc44ec58a6e726d6fef6e62d1bc395852472022-11-20 9:25:367 days 5 hrs ago 0xebf4886be5c7126f59f305561f93fb8d426e9aa3 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x6ab74adbacb04412f05eef92554dee46ffb12fc44ec58a6e726d6fef6e62d1bc395852472022-11-20 9:25:367 days 5 hrs ago 0x6126cb4836c94299b2b980202f6d2999009ed0d7 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x6ab74adbacb04412f05eef92554dee46ffb12fc44ec58a6e726d6fef6e62d1bc395852472022-11-20 9:25:367 days 5 hrs ago 0x6126cb4836c94299b2b980202f6d2999009ed0d7 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x887191b8bea988ea8396ea0fa0dfa5c845d623dc0a81f01fca9920f344012f81389494612022-11-18 2:59:449 days 12 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x962e6ec0ab699a41a10a7eadf5d0a49da3a32f98420663d6da5b33ca389a8031387866442022-11-17 10:43:5410 days 4 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x9731a0d6e272ce2898e0fad03076c502ef2f1736cb5206162854b259f49444e9385525712022-11-16 12:48:4911 days 2 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x536dd0e4ec0ef76e98c786255858d7b46764c2b33416d90c53dec08b20151613383992072022-11-15 21:59:1211 days 17 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xd489e0bee744a8fb6c19bce752e115207621099b0d3d3f7633a696a1dc5e807e379346662022-11-14 5:15:5413 days 10 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xd489e0bee744a8fb6c19bce752e115207621099b0d3d3f7633a696a1dc5e807e379346662022-11-14 5:15:5413 days 10 hrs ago 0xebf4886be5c7126f59f305561f93fb8d426e9aa3 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xd489e0bee744a8fb6c19bce752e115207621099b0d3d3f7633a696a1dc5e807e379346662022-11-14 5:15:5413 days 10 hrs ago 0x27b8888616bc4610a970007f6ccf7cbcd4927ca1 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xd489e0bee744a8fb6c19bce752e115207621099b0d3d3f7633a696a1dc5e807e379346662022-11-14 5:15:5413 days 10 hrs ago 0x27b8888616bc4610a970007f6ccf7cbcd4927ca1 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x7c4d23526f94e32089ae444943b6b7364a689912c835bc8a06b2d6749229641a379284982022-11-14 4:35:2013 days 10 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x7c4d23526f94e32089ae444943b6b7364a689912c835bc8a06b2d6749229641a379284982022-11-14 4:35:2013 days 10 hrs ago SushiSwap: Router 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xf277ae168f35fb7eac129b235a84d542364aa8003883d3c40908056ec1a56c42379235772022-11-14 4:02:4113 days 11 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xbc22104ffa8ae5985fde0dce35e32cad1fc0d01a2aa9fb5d0d725864103a1d61376992072022-11-13 7:56:1914 days 7 hrs ago Arbi's Finance: stARBIS Token 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x9a53f89204cb5b0335fe9684d56cba230b1a6f4100edae81239323b3549edca4375940962022-11-12 20:33:4114 days 18 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x9a53f89204cb5b0335fe9684d56cba230b1a6f4100edae81239323b3549edca4375940962022-11-12 20:33:4114 days 18 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x9a53f89204cb5b0335fe9684d56cba230b1a6f4100edae81239323b3549edca4375940962022-11-12 20:33:4114 days 18 hrs ago 0x40c938444c725ea6eb6992ca71f94b6945b43335 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xe078741057ed652c9a9228e4ace4b35f765eaaf139f9811e4b20441024c492d5373672192022-11-12 1:23:0815 days 13 hrs ago 0x65b752436fd17f64776208d72d44108580d1a9db 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xbb9f1d1946c4b22f0228341023bda92311fe47ad39167b2cd61b14fd3a2423ce373670542022-11-12 1:22:1215 days 13 hrs ago 0x65b752436fd17f64776208d72d44108580d1a9db 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0x263c5d1bbf5282f6e5aeddd3aff7cf3c1117aa6cd6331866b3d6670bc9c38111373668362022-11-12 1:20:5715 days 13 hrs ago 0x65b752436fd17f64776208d72d44108580d1a9db 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xe98230f0ec851b8a054dfcdd1a28e3b3638a6de5bfe36a017938cea56b8b5d55373664292022-11-12 1:18:5115 days 13 hrs ago 0x65b752436fd17f64776208d72d44108580d1a9db 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
0xaf9e101c6f7bed9427b045b1985e9a0af5bb0137ca315cbb1e538f66bb554111373658112022-11-12 1:15:5115 days 14 hrs ago 0x65b752436fd17f64776208d72d44108580d1a9db 0xdb96f8efd6865644993505318cc08ff9c42fb9ac0 ETH
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Z2O

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 100 runs

Other Settings:
default evmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : Z2O.sol
// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library EnumerableSet {

  // To implement this library for multiple types with as little code
  // repetition as possible, we write it in terms of a generic Set type with
  // bytes32 values.
  // The Set implementation uses private functions, and user-facing
  // implementations (such as AddressSet) are just wrappers around the
  // underlying Set.
  // This means that we can only create new EnumerableSets for types that fit
  // in bytes32.
  struct Set {
    // Storage of set values
    bytes32[] _values;

    // Position of the value in the `values` array, plus 1 because index 0
    // means a value is not in the set.
    mapping (bytes32 => uint256) _indexes;
  }

  /**
   * @dev Add a value to a set. O(1).
   *
   * Returns true if the value was added to the set, that is if it was not
   * already present.
   */
  function _add(Set storage set, bytes32 value) private returns (bool) {
    if (!_contains(set, value)) {
      set._values.push(value);
      // The value is stored at length-1, but we add 1 to all indexes
      // and use 0 as a sentinel value
      set._indexes[value] = set._values.length;
      return true;
    } else {
      return false;
    }
  }

  /**
   * @dev Removes a value from a set. O(1).
   *
   * Returns true if the value was removed from the set, that is if it was
   * present.
   */
  function _remove(Set storage set, bytes32 value) private returns (bool) {
    // We read and store the value's index to prevent multiple reads from the same storage slot
    uint256 valueIndex = set._indexes[value];

    if (valueIndex != 0) { // Equivalent to contains(set, value)
      // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
      // the array, and then remove the last element (sometimes called as 'swap and pop').
      // This modifies the order of the array, as noted in {at}.

      uint256 toDeleteIndex = valueIndex - 1;
      uint256 lastIndex = set._values.length - 1;

      // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
      // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

      bytes32 lastvalue = set._values[lastIndex];

      // Move the last value to the index where the value to delete is
      set._values[toDeleteIndex] = lastvalue;
      // Update the index for the moved value
      set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

      // Delete the slot where the moved value was stored
      set._values.pop();

      // Delete the index for the deleted slot
      delete set._indexes[value];

      return true;
    } else {
      return false;
    }
  }

  /**
   * @dev Returns true if the value is in the set. O(1).
   */
  function _contains(Set storage set, bytes32 value) private view returns (bool) {
    return set._indexes[value] != 0;
  }

  /**
   * @dev Returns the number of values on the set. O(1).
   */
  function _length(Set storage set) private view returns (uint256) {
    return set._values.length;
  }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
  function _at(Set storage set, uint256 index) private view returns (bytes32) {
    require(set._values.length > index, "EnumerableSet: index out of bounds");
    return set._values[index];
  }

  function _getValues( Set storage set_ ) private view returns ( bytes32[] storage ) {
    return set_._values;
  }

  // TODO needs insert function that maintains order.
  // TODO needs NatSpec documentation comment.
  /**
   * Inserts new value by moving existing value at provided index to end 
   * of array and setting provided value at provided index
   */
  function _insert(Set storage set_, uint256 index_, bytes32 valueToInsert_ ) private returns ( bool ) {
    require(  set_._values.length > index_ );
    require( !_contains( set_, valueToInsert_ ), "Remove value you wish to insert if you wish to reorder array." );
    bytes32 existingValue_ = _at( set_, index_ );
    set_._values[index_] = valueToInsert_;
    return _add( set_, existingValue_);
  } 

  struct Bytes4Set {
    Set _inner;
  }

  /**
   * @dev Add a value to a set. O(1).
   *
   * Returns true if the value was added to the set, that is if it was not
   * already present.
   */
  function add(Bytes4Set storage set, bytes4 value) internal returns (bool) {
    return _add(set._inner, value);
  }

  /**
   * @dev Removes a value from a set. O(1).
   *
   * Returns true if the value was removed from the set, that is if it was
   * present.
   */
  function remove(Bytes4Set storage set, bytes4 value) internal returns (bool) {
    return _remove(set._inner, value);
  }

  /**
   * @dev Returns true if the value is in the set. O(1).
   */
  function contains(Bytes4Set storage set, bytes4 value) internal view returns (bool) {
    return _contains(set._inner, value);
  }

  /**
   * @dev Returns the number of values on the set. O(1).
   */
  function length(Bytes4Set storage set) internal view returns (uint256) {
    return _length(set._inner);
  }

  /**
   * @dev Returns the value stored at position `index` in the set. O(1).
   *
   * Note that there are no guarantees on the ordering of values inside the
   * array, and it may change when more values are added or removed.
   *
   * Requirements:
   *
   * - `index` must be strictly less than {length}.
   */
  function at(Bytes4Set storage set, uint256 index) internal view returns ( bytes4 ) {
    return bytes4( _at( set._inner, index ) );
  }

  function getValues( Bytes4Set storage set_ ) internal view returns ( bytes4[] memory ) {
    bytes4[] memory bytes4Array_;
    for( uint256 iteration_ = 0; _length( set_._inner ) > iteration_; iteration_++ ) {
      bytes4Array_[iteration_] = bytes4( _at( set_._inner, iteration_ ) );
    }
    return bytes4Array_;
  }

  function insert( Bytes4Set storage set_, uint256 index_, bytes4 valueToInsert_ ) internal returns ( bool ) {
    return _insert( set_._inner, index_, valueToInsert_ );
  }

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns ( bytes32 ) {
        return _at(set._inner, index);
    }

  function getValues( Bytes32Set storage set_ ) internal view returns ( bytes4[] memory ) {
    bytes4[] memory bytes4Array_;

      for( uint256 iteration_ = 0; _length( set_._inner ) >= iteration_; iteration_++ ){
        bytes4Array_[iteration_] = bytes4( at( set_, iteration_ ) );
      }

      return bytes4Array_;
  }

  function insert( Bytes32Set storage set_, uint256 index_, bytes32 valueToInsert_ ) internal returns ( bool ) {
    return _insert( set_._inner, index_, valueToInsert_ );
  }

  // AddressSet
  struct AddressSet {
    Set _inner;
  }

  /**
   * @dev Add a value to a set. O(1).
   *
   * Returns true if the value was added to the set, that is if it was not
   * already present.
   */
  function add(AddressSet storage set, address value) internal returns (bool) {
    return _add(set._inner, bytes32(uint256(value)));
  }

  /**
   * @dev Removes a value from a set. O(1).
   *
   * Returns true if the value was removed from the set, that is if it was
   * present.
   */
  function remove(AddressSet storage set, address value) internal returns (bool) {
    return _remove(set._inner, bytes32(uint256(value)));
  }

  /**
   * @dev Returns true if the value is in the set. O(1).
   */
  function contains(AddressSet storage set, address value) internal view returns (bool) {
    return _contains(set._inner, bytes32(uint256(value)));
  }

  /**
   * @dev Returns the number of values in the set. O(1).
   */
  function length(AddressSet storage set) internal view returns (uint256) {
    return _length(set._inner);
  }

  /**
   * @dev Returns the value stored at position `index` in the set. O(1).
   *
   * Note that there are no guarantees on the ordering of values inside the
   * array, and it may change when more values are added or removed.
   *
   * Requirements:
   *
   * - `index` must be strictly less than {length}.
   */
  function at(AddressSet storage set, uint256 index) internal view returns (address) {
    return address(uint256(_at(set._inner, index)));
  }

  /**
   * TODO Might require explicit conversion of bytes32[] to address[].
   *  Might require iteration.
   */
  function getValues( AddressSet storage set_ ) internal view returns ( address[] memory ) {

    address[] memory addressArray;

    for( uint256 iteration_ = 0; _length(set_._inner) >= iteration_; iteration_++ ){
      addressArray[iteration_] = at( set_, iteration_ );
    }

    return addressArray;
  }

  function insert(AddressSet storage set_, uint256 index_, address valueToInsert_ ) internal returns ( bool ) {
    return _insert( set_._inner, index_, bytes32(uint256(valueToInsert_)) );
  }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    struct UInt256Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UInt256Set storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UInt256Set storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UInt256Set storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UInt256Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UInt256Set storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

interface IERC20 {
  /**
   * @dev Returns the amount of tokens in existence.
   */
  function totalSupply() external view returns (uint256);

  /**
   * @dev Returns the amount of tokens owned by `account`.
   */
  function balanceOf(address account) external view returns (uint256);

  /**
   * @dev Moves `amount` tokens from the caller's account to `recipient`.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transfer(address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Returns the remaining number of tokens that `spender` will be
   * allowed to spend on behalf of `owner` through {transferFrom}. This is
   * zero by default.
   *
   * This value changes when {approve} or {transferFrom} are called.
   */
  function allowance(address owner, address spender) external view returns (uint256);

  /**
   * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * IMPORTANT: Beware that changing an allowance with this method brings the risk
   * that someone may use both the old and the new allowance by unfortunate
   * transaction ordering. One possible solution to mitigate this race
   * condition is to first reduce the spender's allowance to 0 and set the
   * desired value afterwards:
   * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
   *
   * Emits an {Approval} event.
   */
  function approve(address spender, uint256 amount) external returns (bool);

  /**
   * @dev Moves `amount` tokens from `sender` to `recipient` using the
   * allowance mechanism. `amount` is then deducted from the caller's
   * allowance.
   *
   * Returns a boolean value indicating whether the operation succeeded.
   *
   * Emits a {Transfer} event.
   */
  function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

  /**
   * @dev Emitted when `value` tokens are moved from one account (`from`) to
   * another (`to`).
   *
   * Note that `value` may be zero.
   */
  event Transfer(address indexed from, address indexed to, uint256 value);

  /**
   * @dev Emitted when the allowance of a `spender` for an `owner` is set by
   * a call to {approve}. `value` is the new allowance.
   */
  event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {

        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add( div( a, 2), 1 );
            while (b < c) {
                c = b;
                b = div( add( div( a, b ), b), 2 );
            }
        } else if (a != 0) {
            c = 1;
        }
    }

    function percentageAmount( uint256 total_, uint8 percentage_ ) internal pure returns ( uint256 percentAmount_ ) {
        return div( mul( total_, percentage_ ), 1000 );
    }

    function substractPercentage( uint256 total_, uint8 percentageToSub_ ) internal pure returns ( uint256 result_ ) {
        return sub( total_, div( mul( total_, percentageToSub_ ), 1000 ) );
    }

    function percentageOfTotal( uint256 part_, uint256 total_ ) internal pure returns ( uint256 percent_ ) {
        return div( mul(part_, 100) , total_ );
    }

    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }

    function quadraticPricing( uint256 payment_, uint256 multiplier_ ) internal pure returns (uint256) {
        return sqrrt( mul( multiplier_, payment_ ) );
    }

  function bondingCurve( uint256 supply_, uint256 multiplier_ ) internal pure returns (uint256) {
      return mul( multiplier_, supply_ );
  }
}

abstract contract ERC20 is IERC20 {

  using SafeMath for uint256;

  // TODO comment actual hash value.
  bytes32 constant private ERC20TOKEN_ERC1820_INTERFACE_ID = keccak256( "ERC20Token" );
    
  // Present in ERC777
  mapping (address => uint256) internal _balances;

  // Present in ERC777
  mapping (address => mapping (address => uint256)) internal _allowances;

  // Present in ERC777
  uint256 internal _totalSupply;

  // Present in ERC777
  string internal _name;
    
  // Present in ERC777
  string internal _symbol;
    
  // Present in ERC777
  uint8 internal _decimals;

  constructor (string memory name_, string memory symbol_, uint8 decimals_) {
    _name = name_;
    _symbol = symbol_;
    _decimals = decimals_;
  }

  function name() public view returns (string memory) {
    return _name;
  }

  function symbol() public view returns (string memory) {
    return _symbol;
  }

  function decimals() public view returns (uint8) {
    return _decimals;
  }

  function totalSupply() public view override returns (uint256) {
    return _totalSupply;
  }

  function balanceOf(address account) public view virtual override returns (uint256) {
    return _balances[account];
  }

  function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
    _transfer(msg.sender, recipient, amount);
    return true;
  }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender]
          .sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender]
          .sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
      require(sender != address(0), "ERC20: transfer from the zero address");
      require(recipient != address(0), "ERC20: transfer to the zero address");

      _beforeTokenTransfer(sender, recipient, amount);

      _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
      _balances[recipient] = _balances[recipient].add(amount);
      emit Transfer(sender, recipient, amount);
    }

    function _mint(address account_, uint256 amount_) internal virtual {
        require(account_ != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address( this ), account_, amount_);
        _totalSupply = _totalSupply.add(amount_);
        _balances[account_] = _balances[account_].add(amount_);
        emit Transfer(address( this ), account_, amount_);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

  function _beforeTokenTransfer( address from_, address to_, uint256 amount_ ) internal virtual { }
}

library Counters {
    using SafeMath for uint256;

    struct Counter {
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

interface IERC2612Permit {

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function nonces(address owner) external view returns (uint256);
}

abstract contract ERC20Permit is ERC20, IERC2612Permit {
    using Counters for Counters.Counter;

    mapping(address => Counters.Counter) private _nonces;

    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH = 0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;

    bytes32 public DOMAIN_SEPARATOR;

    constructor() {
        uint256 chainID;
        assembly {
            chainID := chainid()
        }

        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name())),
                keccak256(bytes("1")), // Version
                chainID,
                address(this)
            )
        );
    }

    function permit(
        address owner,
        address spender,
        uint256 amount,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual override {
        require(block.timestamp <= deadline, "Permit: expired deadline");

        bytes32 hashStruct =
            keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, amount, _nonces[owner].current(), deadline));

        bytes32 _hash = keccak256(abi.encodePacked(uint16(0x1901), DOMAIN_SEPARATOR, hashStruct));

        address signer = ecrecover(_hash, v, r, s);
        require(signer != address(0) && signer == owner, "ZeroSwapPermit: Invalid signature");

        _nonces[owner].increment();
        _approve(owner, spender, amount);
    }

    function nonces(address owner) public view override returns (uint256) {
        return _nonces[owner].current();
    }
}

interface IOwnable {
  function owner() external view returns (address);

  function renounceOwnership() external;
  
  function transferOwnership( address newOwner_ ) external;
}

contract Ownable is IOwnable {
    
  address internal _owner;

  event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

  constructor () {
    _owner = msg.sender;
    emit OwnershipTransferred( address(0), _owner );
  }

  function owner() public view override returns (address) {
    return _owner;
  }

  modifier onlyOwner() {
    require( _owner == msg.sender, "Ownable: caller is not the owner" );
    _;
  }

  function renounceOwnership() public virtual override onlyOwner() {
    emit OwnershipTransferred( _owner, address(0) );
    _owner = address(0);
  }

  function transferOwnership( address newOwner_ ) public virtual override onlyOwner() {
    require( newOwner_ != address(0), "Ownable: new owner is the zero address");
    emit OwnershipTransferred( _owner, newOwner_ );
    _owner = newOwner_;
  }
}

contract VaultOwned is Ownable {
    
  address internal _vault;

  function setVault( address vault_ ) external onlyOwner() returns ( bool ) {
    _vault = vault_;

    return true;
  }

  function vault() public view returns (address) {
    return _vault;
  }

  modifier onlyVault() {
    require( _vault == msg.sender, "VaultOwned: caller is not the Vault" );
    _;
  }

}

contract Z2O is ERC20Permit, VaultOwned {

    using SafeMath for uint256;

    constructor() ERC20("ZeroTwOhm", "Z2O", 9) {
    }

    function mint(address account_, uint256 amount_) external onlyVault() {
        _mint(account_, amount_);
    }

    function burn(uint256 amount) public virtual {
        _burn(msg.sender, amount);
    }
     
    function burnFrom(address account_, uint256 amount_) public virtual {
        _burnFrom(account_, amount_);
    }

    function _burnFrom(address account_, uint256 amount_) public virtual {
        uint256 decreasedAllowance_ =
            allowance(account_, msg.sender).sub(
                amount_,
                "ERC20: burn amount exceeds allowance"
            );

        _approve(account_, msg.sender, decreasedAllowance_);
        _burn(account_, amount_);
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 100
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"_burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account_","type":"address"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"vault_","type":"address"}],"name":"setVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50604051806040016040528060098152602001685a65726f54774f686d60b81b815250604051806040016040528060038152602001625a324f60e81b815250600982600390805190602001906200006a9291906200022b565b508151620000809060049060208501906200022b565b506005805460ff191660ff92909216919091179055504690507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f620000c462000191565b805160209182012060408051808201825260018152603160f81b90840152805180840194909452838101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606084015260808301939093523060a0808401919091528351808403909101815260c0909201928390528151910120600755600880546001600160a01b0319163317908190556001600160a01b0316906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3620002d7565b60038054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015620002215780601f10620001f55761010080835404028352916020019162000221565b820191906000526020600020905b8154815290600101906020018083116200020357829003601f168201915b5050505050905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282620002635760008555620002ae565b82601f106200027e57805160ff1916838001178555620002ae565b82800160010185558215620002ae579182015b82811115620002ae57825182559160200191906001019062000291565b50620002bc929150620002c0565b5090565b5b80821115620002bc5760008155600101620002c1565b61144680620002e76000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c8063715018a6116100c3578063a457c2d71161007c578063a457c2d71461040d578063a9059cbb14610439578063d505accf14610465578063dd62ed3e146104b6578063f2fde38b146104e4578063fbfa77cf1461050a57610158565b8063715018a61461035b57806379cc6790146103635780637ecebe001461038f5780638da5cb5b146103b557806395d89b41146103d9578063a22b35ce146103e157610158565b80633644e515116101155780633644e51514610290578063395093511461029857806340c10f19146102c457806342966c68146102f25780636817031b1461030f57806370a082311461033557610158565b806306fdde031461015d578063095ea7b3146101da57806318160ddd1461021a57806323b872dd1461023457806330adf81f1461026a578063313ce56714610272575b600080fd5b610165610512565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561019f578181015183820152602001610187565b50505050905090810190601f1680156101cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610206600480360360408110156101f057600080fd5b506001600160a01b0381351690602001356105a8565b604080519115158252519081900360200190f35b6102226105be565b60408051918252519081900360200190f35b6102066004803603606081101561024a57600080fd5b506001600160a01b038135811691602081013590911690604001356105c4565b61022261062d565b61027a610651565b6040805160ff9092168252519081900360200190f35b61022261065a565b610206600480360360408110156102ae57600080fd5b506001600160a01b038135169060200135610660565b6102f0600480360360408110156102da57600080fd5b506001600160a01b038135169060200135610696565b005b6102f06004803603602081101561030857600080fd5b50356106ed565b6102066004803603602081101561032557600080fd5b50356001600160a01b03166106fa565b6102226004803603602081101561034b57600080fd5b50356001600160a01b031661076f565b6102f061078a565b6102f06004803603604081101561037957600080fd5b506001600160a01b038135169060200135610821565b610222600480360360208110156103a557600080fd5b50356001600160a01b031661082b565b6103bd610852565b604080516001600160a01b039092168252519081900360200190f35b610165610861565b6102f0600480360360408110156103f757600080fd5b506001600160a01b0381351690602001356108c2565b6102066004803603604081101561042357600080fd5b506001600160a01b03813516906020013561090e565b6102066004803603604081101561044f57600080fd5b506001600160a01b03813516906020013561095d565b6102f0600480360360e081101561047b57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561096a565b610222600480360360408110156104cc57600080fd5b506001600160a01b0381358116916020013516610b92565b6102f0600480360360208110156104fa57600080fd5b50356001600160a01b0316610bbd565b6103bd610cab565b60038054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561059e5780601f106105735761010080835404028352916020019161059e565b820191906000526020600020905b81548152906001019060200180831161058157829003601f168201915b5050505050905090565b60006105b5338484610cba565b50600192915050565b60025490565b60006105d1848484610da6565b610623843361061e856040518060600160405280602881526020016112d3602891396001600160a01b038a1660009081526001602090815260408083203384529091529020549190610eef565b610cba565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60055460ff1690565b60075481565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105b591859061061e9086610f86565b6009546001600160a01b031633146106df5760405162461bcd60e51b81526004018080602001828103825260238152602001806112fb6023913960400191505060405180910390fd5b6106e98282610fe7565b5050565b6106f733826110c5565b50565b6008546000906001600160a01b0316331461074a576040805162461bcd60e51b8152602060048201819052602482015260008051602061131e833981519152604482015290519081900360640190fd5b50600980546001600160a01b0383166001600160a01b03199091161790556001919050565b6001600160a01b031660009081526020819052604090205490565b6008546001600160a01b031633146107d7576040805162461bcd60e51b8152602060048201819052602482015260008051602061131e833981519152604482015290519081900360640190fd5b6008546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600880546001600160a01b0319169055565b6106e982826108c2565b6001600160a01b038116600090815260066020526040812061084c906111af565b92915050565b6008546001600160a01b031690565b60048054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561059e5780601f106105735761010080835404028352916020019161059e565b60006108f28260405180606001604052806024815260200161133e602491396108eb8633610b92565b9190610eef565b90506108ff833383610cba565b61090983836110c5565b505050565b60006105b5338461061e856040518060600160405280602581526020016113ec602591393360009081526001602090815260408083206001600160a01b038d1684529091529020549190610eef565b60006105b5338484610da6565b834211156109ba576040805162461bcd60e51b81526020600482015260186024820152775065726d69743a206578706972656420646561646c696e6560401b604482015290519081900360640190fd5b6001600160a01b03871660009081526006602052604081207f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c990899089908990610a03906111af565b604080516020808201979097526001600160a01b0395861681830152939094166060840152608083019190915260a082015260c08082018990528251808303909101815260e08201835280519084012060075461190160f01b610100840152610102830152610122808301829052835180840390910181526101428301808552815191860191909120600091829052610162840180865281905260ff8a166101828501526101a284018990526101c28401889052935191955092936001926101e280820193601f1981019281900390910190855afa158015610ae9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590610b1f5750896001600160a01b0316816001600160a01b0316145b610b5a5760405162461bcd60e51b81526004018080602001828103825260218152602001806112b26021913960400191505060405180910390fd5b6001600160a01b038a166000908152600660205260409020610b7b906111b3565b610b868a8a8a610cba565b50505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6008546001600160a01b03163314610c0a576040805162461bcd60e51b8152602060048201819052602482015260008051602061131e833981519152604482015290519081900360640190fd5b6001600160a01b038116610c4f5760405162461bcd60e51b81526004018080602001828103825260268152602001806112446026913960400191505060405180910390fd5b6008546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6009546001600160a01b031690565b6001600160a01b038316610cff5760405162461bcd60e51b81526004018080602001828103825260248152602001806113c86024913960400191505060405180910390fd5b6001600160a01b038216610d445760405162461bcd60e51b815260040180806020018281038252602281526020018061126a6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610deb5760405162461bcd60e51b81526004018080602001828103825260258152602001806113a36025913960400191505060405180910390fd5b6001600160a01b038216610e305760405162461bcd60e51b81526004018080602001828103825260238152602001806111ff6023913960400191505060405180910390fd5b610e3b838383610909565b610e788160405180606001604052806026815260200161128c602691396001600160a01b0386166000908152602081905260409020549190610eef565b6001600160a01b038085166000908152602081905260408082209390935590841681522054610ea79082610f86565b6001600160a01b0380841660008181526020818152604091829020949094558051858152905191939287169260008051602061136283398151915292918290030190a3505050565b60008184841115610f7e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610f43578181015183820152602001610f2b565b50505050905090810190601f168015610f705780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610fe0576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b6001600160a01b038216611042576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b61104d308383610909565b60025461105a9082610f86565b6002556001600160a01b0382166000908152602081905260409020546110809082610f86565b6001600160a01b038316600081815260208181526040918290209390935580518481529051919230926000805160206113628339815191529281900390910190a35050565b6001600160a01b03821661110a5760405162461bcd60e51b81526004018080602001828103825260218152602001806113826021913960400191505060405180910390fd5b61111682600083610909565b61115381604051806060016040528060228152602001611222602291396001600160a01b0385166000908152602081905260409020549190610eef565b6001600160a01b03831660009081526020819052604090205560025461117990826111bc565b6002556040805182815290516000916001600160a01b038516916000805160206113628339815191529181900360200190a35050565b5490565b80546001019055565b6000610fe083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610eef56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655a65726f537761705065726d69743a20496e76616c6964207369676e617475726545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655661756c744f776e65643a2063616c6c6572206973206e6f7420746865205661756c744f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657245524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203875e36bf7fc71909b6bae43cef63573193b86eb31ff38a4b1c669916cd3473164736f6c63430007050033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.