private void getNonSymbolChangesForMyExternals(TaskMonitor monitor) throws CancelledException {
		AddressIterator myModifiedAddressIterator = myExternalSet.getAddresses(true);
		while (myModifiedAddressIterator.hasNext()) {
			monitor.checkCancelled();
			Address externalAddress = myModifiedAddressIterator.next();
			Symbol mySymbol = symbolTables[MY].getPrimarySymbol(externalAddress);
			if (mySymbol == null) {
				continue; // External was removed. (Should be handled via removed symbol ID.)
			}
			long myID = mySymbol.getID();
			if (myModifiedIDs.contains(myID) || myAddIDs.contains(myID)) {
				continue; // External is already in ID set for changes or adds.
			}

			long originalID = resolveOriginalIDFromMyID(myID);
			Symbol originalSymbol = symbolTables[ORIGINAL].getSymbol(originalID);
			if (originalSymbol != null) {
				ExternalLocation myExternalLocation =
					externalManagers[MY].getExternalLocation(mySymbol);
				ExternalLocation originalExternalLocation =
					externalManagers[ORIGINAL].getExternalLocation(originalSymbol);
				if (!equivalentExternals(myExternalLocation, originalExternalLocation)) {
					// Otherwise, something was changed about this External.
					myModifiedIDs.add(myID);
				}
				continue;
			}
			// Otherwise we have a change without an original. Huh?
			Msg.error(this, "Why is there a change to MY external without an ORIGINAL at " +
				externalAddress.toString(true) + "?");
		}
	}
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/ExternalFunctionMerger.java