private void doExecute(GhidraState runState, ScriptControls runControls)
			throws Exception {
		this.state = runState;
		this.writer = runControls.getWriter();
		this.errorWriter = runControls.getErrorWriter();
		this.decorateOutput = runControls.shouldDecorateOutput();
		this.monitor = runControls.getMonitor();
		loadVariablesFromState();

		loadPropertiesFile();

		originalProgram = currentProgram;
		askScriptArgIndex = 0;

		AnalysisMode scriptAnalysisMode = getScriptAnalysisMode();
		if (originalProgram == null || scriptAnalysisMode == AnalysisMode.ENABLED) {
			executeNormal();
		}
		else {
			executeAsAnalysisWorker(scriptAnalysisMode == AnalysisMode.SUSPENDED,
				runControls.getMonitor());
		}
		updateStateFromVariables();
	}
Execute/run script with the given {@link GhidraState state} and 
{@link ScriptControls controls} and {@link #doCleanup} afterwards. 
<p>
NOTE: This method is not intended to be called by script writers.

@param runState state object
@param runControls controls object
@throws Exception if the script excepts
Ghidra/Features/Base/src/main/java/ghidra/app/script/GhidraScript.java