private void autoMerge(ListingMerger[] mergers, TaskMonitor monitor)
			throws ProgramConflictException, MemoryAccessException, CancelledException {
		float progressRangeSize = 100 / mergers.length;
		int progressMin = 0;
		for (int mergerIndex = 0; mergerIndex < mergers.length; mergerIndex++) {
			conflictInfoPanel.setConflictType(mergers[mergerIndex].getConflictType());
			currentMerger = mergers[mergerIndex];
			// Give each of the mergers an equal portion of the progress bar to fill in.
			int progressMax = (int) progressRangeSize * (mergerIndex + 1);
			mergers[mergerIndex].autoMerge(progressMin, progressMax, monitor);
			progressMin = progressMax;
		}
	}
Performs an automatic merge of My changes that are not conflicts for all the mergers
specified. Each of the merger's autoMerge is performed in the order they
are found in the array. Each autoMerge will cause that merger to determine conflicts.
<br>Note: This method should be called a single time for any set of listing mergers
and then be followed by the mergeConflicts() call to resolve conflicts.
@param mergers the listing mergers to be auto-merged.
@param monitor indicates progress to user and allows cancel.
@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