code: CompletableFuture<Void> findAll(long bucketOffset, BiConsumer<ResultT, Long> handler, TimeoutTimer timer) {
          AtomicLong offset = new AtomicLong(bucketOffset);
          return Futures.loop(
                  () -> offset.get() >= 0,
                  () -> {
                      // Read the Key from the Segment.
                      ReadResult readResult = segment.read(offset.get(), getMaxReadLength(), timer.getRemaining());
                      val reader = getReader(null, offset.get(), timer);
                      AsyncReadResultProcessor.process(readResult, reader, this.executor);
                      return reader.getResult()
                              .thenComposeAsync(entryResult -> {
                                  // Record the entry, but only if we haven't processed its Key before and only if it exists.
                                  handler.accept(entryResult, offset.get());
  
                                  // Get the next Key Location for this bucket.
                                  return this.getBackpointer.apply(segment, offset.get(), timer.getRemaining());
                              }, this.executor);
                  },
                  offset::set,
                  this.executor);
      }
docs: Locates all {@link ResultT} instances in a TableBucket.
  
  @param bucketOffset The current segment offset of the Table Bucket we are looking into.
  @param handler      A {@link BiConsumer} that will be invoked every time a {@link ResultT} is fetched. This will not
  be invoked for any {@link ResultT} item that is marked as deleted. The second argument indicates
  the Segment Offset where the given item resides.
  @param timer        A {@link TimeoutTimer} for the operation.
  @return A CompletableFuture that, when completed, will indicate the operation completed.