private void mergeChangesAndDetermineConflicts(ExternalLocation[] externalLocations,
			TaskMonitor monitor) throws CancelledException {

		if (!equivalentExternals(externalLocations[LATEST], externalLocations[MY])) {
			// Both Latest and My changed it but they don't match.
			// See what pieces can be auto-merged and which are conflicts.

			// Set up address translator information for any ProgramMerge method calls.
			updateAddressTranslators(externalLocations);

			int latestMyChanges =
				getBasicExternalDiffs(externalLocations[LATEST], externalLocations[MY]);
			if (latestMyChanges == 0) {
				return; // Already the same.
			}
			int originalLatestChanges =
				getBasicExternalDiffs(externalLocations[ORIGINAL], externalLocations[LATEST]);
			int originalMyChanges =
				getBasicExternalDiffs(externalLocations[ORIGINAL], externalLocations[MY]);

			int detailConflictFlags = 0;
			// Check and auto-merge the namespace.
			detailConflictFlags |=
				determineBasicExternalConflict(externalLocations, EXTERNAL_NAMESPACE,
					latestMyChanges, originalLatestChanges, originalMyChanges, monitor);

			// Check and auto-merge the name and source type.
			detailConflictFlags |= determineBasicExternalConflict(externalLocations, EXTERNAL_LABEL,
				latestMyChanges, originalLatestChanges, originalMyChanges, monitor);

			// Source Type is handled along with Label.
//			detailConflictFlags |=
//				determineBasicExternalConflict(externalLocations, EXTERNAL_SOURCE_TYPE,
//					latestMyChanges, originalLatestChanges, originalMyChanges, monitor);

			// Check and auto-merge memory address.
			detailConflictFlags |=
				determineBasicExternalConflict(externalLocations, EXTERNAL_ADDRESS, latestMyChanges,
					originalLatestChanges, originalMyChanges, monitor);

			if (detailConflictFlags != 0) {
				saveExternalDetailConflict(externalLocations, detailConflictFlags);
			}

			// Check Data Type vs Function
			determineExternalDataTypeConflict(externalLocations, latestMyChanges,
				originalLatestChanges, originalMyChanges, monitor);

			// Check Function Changes
			determineExternalFunctionConflict(externalLocations, latestMyChanges,
				originalLatestChanges, originalMyChanges, monitor);

		}
		// Otherwise Latest and My are equivalent.
	}
@param entry
@param type (FUNC_RETURN_TYPE, FUNC_RETURN_ADDRESS_OFFSET,
FUNC_PARAMETER_OFFSET, FUNC_LOCAL_SIZE, FUNC_STACK_PURGE_SIZE, FUNC_NAME, FUNC_INLINE,
FUNC_NO_RETURN, FUNC_CALLING_CONVENTION)
@param latestMyChanges
@param originalLatestChanges
@param originalMyChanges
@param monitor
@return
@throws CancelledException
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalFunctionMerger.java