private void mergeExternalFunctions(TaskMonitor monitor)
			throws ProgramConflictException, MemoryAccessException, CancelledException {

		emptyListingViewForPrograms();

		displayInitialPhaseMessage(EXTERNALS_PHASE, "Merge of External Function and Label changes");

		conflictInfoPanel.setConflictType(externalFunctionMerger.getConflictType());
		currentMerger = externalFunctionMerger;
		// Only one merger so it gets all of the progress bar to fill in.
		int progressMin = 0;
		int progressMax = 100;
		externalFunctionMerger.autoMerge(progressMin, progressMax, monitor);
		progressMin = progressMax;

		mergeManager.showProgressIcon(false);

		externalFunctionMerger.mergeConflicts(conflictOption, conflictInfoPanel, monitor);

		mergeManager.showProgressIcon(true);
		removeBottomComponent();
		mergeManager.setCompleted(EXTERNALS_PHASE);

		setListingViewsToEntireProgram();
		externalFunctionMerger.dispose();
	}
Performs autoMerge of bytes and code units followed by merge of byte and code unit conflicts.
@param monitor the task monitor for canceling the merge
@throws ProgramConflictException if programs can't be compared using Diff.
@throws MemoryAccessException if bytes can't be merged.
@throws CancelledException if the user cancels the merge.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ListingMergeManager.java