private void initMergeInfo() {
		// Memory Merge may have limited the changed code units we are working with.
		AddressSetView resultSet = resultPgm.getMemory();
		this.latestSet = latestChanges.getRegisterAddressSet().intersect(resultSet);
		this.mySet = myChanges.getRegisterAddressSet().intersect(resultSet);

		originalContext = originalPgm.getProgramContext();
		latestContext = latestPgm.getProgramContext();
		myContext = myPgm.getProgramContext();
		resultContext = resultPgm.getProgramContext();

		registers = myContext.getRegisters();

		try {
			diffOriginalLatest = new ProgramDiff(originalPgm, latestPgm);
			diffOriginalMy = new ProgramDiff(originalPgm, myPgm);
			diffFilter = new ProgramDiffFilter(ProgramDiffFilter.PROGRAM_CONTEXT_DIFFS);

			mergeFilter =
				new ProgramMergeFilter(ProgramMergeFilter.PROGRAM_CONTEXT,
					ProgramMergeFilter.REPLACE);
		}
		catch (ProgramConflictException e) {
			Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
		}
		catch (IllegalArgumentException e) {
			Msg.error(this, "Unexpected Exception: " + e.getMessage(), e);
		}
	}
Sets up the change address sets, Diffs between the various program versions,
and Merges from various versions to the resulting program.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ProgramContextMergeManager.java