public void finish(Trace trace, TraceSchedule position, PcodeMachine<?> machine,
			TaskMonitor monitor) throws CancelledException {
		TraceThread lastThread = position.getLastThread(trace);
		Sequence remains = steps.relativize(position.steps);
		machine.setSoftwareInterruptMode(SwiMode.IGNORE_ALL);
		if (remains.isNop()) {
			Sequence pRemains = this.pSteps.relativize(position.pSteps);
			lastThread =
				pRemains.execute(trace, lastThread, machine, Stepper.pcode(), monitor);
		}
		else {
			remains = remains.checkFinish(lastThread, machine);
			lastThread =
				remains.execute(trace, lastThread, machine, Stepper.instruction(), monitor);
			lastThread = pSteps.execute(trace, lastThread, machine, Stepper.pcode(), monitor);
		}
	}
Realize the machine state for this schedule using the given trace and pre-positioned machine

<p>
This method executes the remaining steps of this schedule and trailing p-code steps on the
given machine, assuming that machine is already "positioned" at another given schedule.
Assuming successful execution, that machine is now said to be "positioned" at this schedule,
and its state is the result of said execution.

@param trace the trace containing the source snapshot and threads
@param position the current schedule of the given machine
@param machine a machine bound to the trace whose current state reflects the given position
@param monitor a monitor for cancellation and progress reporting
@throws CancelledException if the execution is cancelled
@throws IllegalArgumentException if the given position is not a prefix of this schedule
Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/schedule/TraceSchedule.java