private VerticalChoicesPanel createExternalFunctionVsDataTypeConflictPanel(
			final ExternalLocation[] externalLocations, final TaskMonitor monitor) {

		DataType latestDataType = getResultDataType(externalLocations[LATEST]);

		Function latestFunction = externalLocations[LATEST].getFunction();
		Function originalFunction =
			(externalLocations[ORIGINAL] != null) ? externalLocations[ORIGINAL].getFunction()
					: null;

		String[] header = getExternalInfo(externalLocations, HEADER);
		String[] latest = getExternalInfo(externalLocations, LATEST);
		String[] my = getExternalInfo(externalLocations, MY);
		String[] original = getExternalInfo(externalLocations, ORIGINAL);

		String latestName = externalLocations[LATEST].getSymbol().getName(true);
		String dataTypeIsLatestOrMy = (latestDataType == null) ? MY_TITLE : LATEST_TITLE;
		String functionIsLatestOrMy = (latestFunction == null) ? MY_TITLE : LATEST_TITLE;
		String headerString;
		if (externalLocations[ORIGINAL] != null) {
			String originalName = externalLocations[ORIGINAL].getSymbol().getName(true);
			if (originalFunction == null) {
				headerString = "The external label, " + originalName +
					", had its data type changed in " + dataTypeIsLatestOrMy +
					", but was switched to a function in " + functionIsLatestOrMy + ".";
			}
			else {
				headerString = "The external function, " + originalName + ", was changed in " +
					functionIsLatestOrMy + ", but was switched to a label with a data type in " +
					dataTypeIsLatestOrMy + ".";
			}
		}
		else {
			if (latestFunction == null) {
				headerString = "The external label, " + latestName +
					", was added with a data type in " + dataTypeIsLatestOrMy +
					", but was added as a function in " + functionIsLatestOrMy + ".";
			}
			else {
				headerString = "The external function, " + latestName +
					", was added as a function in " + functionIsLatestOrMy +
					", but was added as a label with a data type in " + dataTypeIsLatestOrMy + ".";
			}
		}

		VerticalChoicesPanel panel = getEmptyVerticalPanel();

		runSwing(() -> {
			panel.setTitle("External Function Versus Data Type");
			panel.setHeader(headerString);
			ChangeListener changeListener = new ExternalFunctionVsDataTypeConflictChangeListener(
				externalLocations, panel, monitor);
			panel.setRowHeader(header);
			panel.addRadioButtonRow(latest, LATEST_BUTTON_NAME, KEEP_LATEST, changeListener);
			panel.addRadioButtonRow(my, CHECKED_OUT_BUTTON_NAME, KEEP_MY, changeListener);
			original[0] = ORIGINAL_TITLE + " version"; // Change since original is only info row.
			panel.addInfoRow(original);

		});
		return panel;
	}
Gets the external locations (result, latest, my, original) for the specified MY program
external space address.<br>
NOTE: Be careful where you call this method from. It is intended to be used for external
location changes only (not for Adds). It gets the ORIGINAL based on MY and then LATEST and
RESULT based on the ORIGINAL.
@param myAddress the MY program external space address for MY external location
@return all four program's external locations.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/ExternalFunctionMerger.java