private void setupSymbolChanges(TaskMonitor monitor) throws CancelledException {

		long[] tempMyAddIDs = listingMergeMgr.myChanges.getSymbolAdditions();
		long[] tempMyChangeIDs = listingMergeMgr.myChanges.getSymbolChanges();
		long[] tempLatestAddIDs = listingMergeMgr.latestChanges.getSymbolAdditions();
		long[] tempLatestChangeIDs = listingMergeMgr.latestChanges.getSymbolChanges();

		int max = tempMyAddIDs.length + tempMyChangeIDs.length + tempLatestAddIDs.length +
			tempLatestChangeIDs.length + 5;
		monitor.setMessage("Symbol Merge: Pre-processing symbol changes...");
		monitor.initialize(max);
//		tempMyAddIDs = getNonMatchingIDsInFirst(tempMyAddIDs, tempMyChangeIDs, monitor);
//		tempMyChangeIDs = getNonMatchingIDsInFirst(tempMyChangeIDs, tempMyAddIDs, monitor);
//		tempLatestAddIDs = getNonMatchingIDsInFirst(tempLatestAddIDs, tempLatestChangeIDs, monitor);
//		tempLatestChangeIDs = getNonMatchingIDsInFirst(tempLatestChangeIDs, tempLatestAddIDs, monitor);

		// AddIDs now have added symbols that are still there.
		// ChangeIDs has symbols changed or removed.
		myPrimaryAddIDs = new LongHashSet();
		latestPrimaryAddIDs = new LongHashSet();

		monitor.setProgress(monitor.getProgress() + 1);
		this.myAddIDs = new long[tempMyAddIDs.length];
		System.arraycopy(tempMyAddIDs, 0, this.myAddIDs, 0, tempMyAddIDs.length);
		Arrays.sort(this.myAddIDs);

		monitor.setProgress(monitor.getProgress() + 1);
		this.latestAddIDs = new long[tempLatestAddIDs.length];
		System.arraycopy(tempLatestAddIDs, 0, this.latestAddIDs, 0, tempLatestAddIDs.length);
		Arrays.sort(this.latestAddIDs);

		monitor.setProgress(monitor.getProgress() + 1);
		this.myChangeIDs = new long[tempMyChangeIDs.length];
		System.arraycopy(tempMyChangeIDs, 0, this.myChangeIDs, 0, tempMyChangeIDs.length);
		Arrays.sort(this.myChangeIDs);

		monitor.setProgress(monitor.getProgress() + 1);
		this.latestChangeIDs = new long[tempLatestChangeIDs.length];
		System.arraycopy(tempLatestChangeIDs, 0, this.latestChangeIDs, 0,
			tempLatestChangeIDs.length);
		Arrays.sort(this.latestChangeIDs);

		monitor.checkCancelled();
		monitor.setProgress(monitor.getProgress() + 1);
		getPrimariesAdded(this.myAddIDs, mySymTab, myPrimaryAddIDs, mySetPrimary);
		getPrimariesAdded(this.latestAddIDs, latestSymTab, latestPrimaryAddIDs, latestSetPrimary);
		getChanges(mySymTab);
		getChanges(latestSymTab);
		// the calls to getChanges() may change some IDs in the add arrays to -1.
		// So find the -1 elements and remove them from the arrays.
		this.myAddIDs = getNonMatchingIDsInFirst(this.myAddIDs, new long[] { -1L }, monitor);
		this.latestAddIDs =
			getNonMatchingIDsInFirst(this.latestAddIDs, new long[] { -1L }, monitor);

		monitor.setProgress(max);
	}
Determine the type of changes to the symbols in the LATEST and MY (CheckedOut) program.
Changes can be symbol removed, added, changed, renamed, and set to primary.
@param monitor task monitor for displaying progress to the user
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/SymbolMerger.java