protected void doPutFutureBytes(OffsetSnap loc, ByteBuffer buf, int dstOffset, int maxLen,
			OutSnap lastSnap, Set<TraceAddressSnapRange> changed) throws IOException {
		if (loc.snap == Lifespan.DOMAIN.lmax()) {
			return;
		}
		// NOTE: Do not leave the buffer advanced from here
		int pos = buf.position();
		// exclusive?
		Iterator<DBTraceMemoryBlockEntry> it =
			blocksByOffset.tail(new OffsetSnap(loc.offset, loc.snap + 1), true).values().iterator();
		AddressSet remaining = new AddressSet(space.getAddress(loc.offset + dstOffset),
			space.getAddress(loc.offset + dstOffset + maxLen - 1));
		while (it.hasNext()) {
			DBTraceMemoryBlockEntry next = it.next();
			if (next.getOffset() != loc.offset || next.isScratch() != loc.isScratch()) {
				break;
			}
			AddressSetView withState =
				getAddressesWithState(next.getSnap(), remaining, state -> true);
			remaining = remaining.subtract(withState);
			long endSnap = next.getSnap() - 1;
			for (AddressRange rng : withState) {
				changed.add(
					new ImmutableTraceAddressSnapRange(rng, Lifespan.span(loc.snap, endSnap)));
			}
			if (remaining.isEmpty()) {
				lastSnap.snap = endSnap;
				break;
			}
			for (AddressRange rng : remaining) {
				int subOffset = (int) (rng.getMinAddress().getOffset() - loc.offset);
				buf.position(pos + subOffset - dstOffset);
				next.setBytes(buf, subOffset, (int) rng.getLength());
			}
		}
		if (!remaining.isEmpty()) {
			lastSnap.snap = Lifespan.DOMAIN.lmax();
			for (AddressRange rng : remaining) {
				changed.add(
					new ImmutableTraceAddressSnapRange(rng, Lifespan.nowOnMaybeScratch(loc.snap)));
			}
		}
		buf.position(pos);
	}
Locate the soonest block entry for the given offset-snap pair

<p>
To qualify, the entry must have a snap greater than (or optionally equal to) that given and
an offset exactly equal to that given. That is, it is the earliest in time, but most follow
the given snap. Additionally, if the given snap is in scratch space, the found entry must
also be in scratch space.

@param loc the offset-snap pair
@param inclusive true to allow equal snap
@return the found entry, or null
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/database/memory/DBTraceMemorySpace.java