docs: @Override
    public Collection<Block> getBySequenceHash(ByteArray sequenceHash) {
      ensureSorted();
  
      // prepare hash for binary search
      int[] hash = sequenceHash.toIntArray();
      if (hash.length != hashInts) {
        throw new IllegalArgumentException("Expected " + hashInts + " ints in hash, but got " + hash.length);
      }
      int offset = size * blockInts;
      for (int i = 0; i < hashInts; i++) {
        blockData[offset++] = hash[i];
      }
  
      int index = DataUtils.binarySearch(byBlockHash);
  
      List<Block> result = new ArrayList<>();
      while (index < size && !isLessByHash(size, index)) {
        // extract block (note that there is no need to extract hash)
        String resourceId = resourceIds[index];
        result.add(createBlock(index, resourceId, sequenceHash));
        index++;
      }
      return result;
    }