text: Clazz.declarePackage ("JS");
  Clazz.load (["JS.ScriptExpr"], "JS.ScriptEval", ["java.lang.Boolean", "$.Float", "$.NullPointerException", "$.Thread", "java.util.Arrays", "$.Hashtable", "$.Map", "javajs.awt.Font", "JU.AU", "$.BArray", "$.BS", "$.Base64", "$.Lst", "$.M3", "$.M4", "$.Measure", "$.P3", "$.P4", "$.PT", "$.Quat", "$.SB", "$.V3", "J.api.Interface", "$.JmolParallelProcessor", "J.atomdata.RadiusData", "J.c.PAL", "$.STR", "$.VDW", "J.i18n.GT", "JM.BondSet", "$.Group", "JS.FileLoadThread", "$.SV", "$.ScriptCompiler", "$.ScriptContext", "$.ScriptDelayThread", "$.ScriptInterruption", "$.ScriptManager", "$.ScriptMathProcessor", "$.T", "JU.BSUtil", "$.ColorEncoder", "$.Edge", "$.Elements", "$.Escape", "$.Logger", "$.Parser", "$.SimpleUnitCell", "$.Txt", "JV.ActionManager", "$.FileManager", "$.JC", "$.StateManager", "$.Viewer"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.sm = null;
  this.isJS = false;
  this.scriptDelayThread = null;
  this.fileLoadThread = null;
  this.allowJSThreads = true;
  this.isFuncReturn = false;
  this.historyDisabled = false;
  this.debugScript = false;
  this.isCmdLine_C_Option = false;
  this.isCmdLine_c_or_C_Option = false;
  this.listCommands = false;
  this.tQuiet = false;
  this.executionStopped = false;
  this.executionPaused = false;
  this.executionStepping = false;
  this.executing = false;
  this.timeBeginExecution = 0;
  this.timeEndExecution = 0;
  this.mustResumeEval = false;
  this.currentThread = null;
  this.compiler = null;
  this.outputBuffer = null;
  this.contextPath = "";
  this.scriptFileName = null;
  this.functionName = null;
  this.$isStateScript = false;
  this.scriptLevel = 0;
  this.aatoken = null;
  this.lineNumbers = null;
  this.lineIndices = null;
  this.script = null;
  this.scriptExtensions = null;
  this.pc = 0;
  this.thisCommand = null;
  this.fullCommand = null;
  this.lineEnd = 0;
  this.pcEnd = 0;
  this.forceNoAddHydrogens = false;
  this.parallelProcessor = null;
  this.pcResume = -1;
  Clazz.instantialize (this, arguments);
  }, JS, "ScriptEval", JS.ScriptExpr);
  Clazz.overrideMethod (c$, "getAllowJSThreads",
  function () {
  return this.allowJSThreads;
  });
  Clazz.defineMethod (c$, "doReport",
  function () {
  return (!this.tQuiet && this.scriptLevel <= JS.ScriptEval.scriptReportingLevel);
  });
  Clazz.overrideMethod (c$, "isStateScript",
  function () {
  return this.$isStateScript;
  });
  Clazz.overrideMethod (c$, "setStatic",
  function (tok, ival) {
  switch (tok) {
  case 553648167:
  if (ival >= 10) JS.ScriptEval.contextDepthMax = ival;
  return JS.ScriptEval.contextDepthMax;
  case 553648147:
  if (ival >= 0) JS.ScriptEval.commandHistoryLevelMax = ival;
  return JS.ScriptEval.commandHistoryLevelMax;
  case 553648168:
  if (ival >= 0) JS.ScriptEval.scriptReportingLevel = ival;
  return JS.ScriptEval.scriptReportingLevel;
  }
  return 0;
  }, "~N,~N");
  Clazz.overrideMethod (c$, "getScript",
  function () {
  return this.script;
  });
  Clazz.makeConstructor (c$,
  function () {
  this.currentThread = Thread.currentThread ();
  });
  Clazz.overrideMethod (c$, "setViewer",
  function (vwr) {
  this.vwr = vwr;
  this.compiler = (this.compiler == null ? vwr.compiler : this.compiler);
  this.isJS = vwr.isSingleThreaded;
  return this;
  }, "JV.Viewer");
  Clazz.overrideMethod (c$, "setCompiler",
  function () {
  this.vwr.compiler = this.compiler =  new JS.ScriptCompiler (this.vwr);
  });
  Clazz.overrideMethod (c$, "compileScriptString",
  function (script, tQuiet) {
  this.clearState (tQuiet);
  this.contextPath = "[script]";
  return this.compileScript (null, script, this.debugScript);
  }, "~S,~B");
  Clazz.overrideMethod (c$, "compileScriptFile",
  function (filename, tQuiet) {
  this.clearState (tQuiet);
  this.contextPath = filename;
  return this.compileScriptFileInternal (filename, null, null, null);
  }, "~S,~B");
  Clazz.overrideMethod (c$, "evaluateCompiledScript",
  function (isCmdLine_c_or_C_Option, isCmdLine_C_Option, historyDisabled, listCommands, outputBuffer, allowThreads) {
  var tempOpen = this.isCmdLine_C_Option;
  this.isCmdLine_C_Option = isCmdLine_C_Option;
  this.chk = this.isCmdLine_c_or_C_Option = isCmdLine_c_or_C_Option;
  this.historyDisabled = historyDisabled;
  this.outputBuffer = outputBuffer;
  this.currentThread = Thread.currentThread ();
  this.allowJSThreads =  new Boolean (allowThreads & !this.vwr.getBoolean (603979892)).valueOf ();
  this.listCommands = listCommands;
  this.timeBeginExecution = System.currentTimeMillis ();
  this.executionStopped = this.executionPaused = false;
  this.executionStepping = false;
  this.executing = true;
  this.vwr.pushHoldRepaintWhy ("runEval");
  this.setScriptExtensions ();
  this.executeCommands (false, true);
  this.isCmdLine_C_Option = tempOpen;
  if (this.$isStateScript) JS.ScriptManager.setStateScriptVersion (this.vwr, null);
  }, "~B,~B,~B,~B,JU.SB,~B");
  Clazz.defineMethod (c$, "useThreads",
  function () {
  return (!this.chk && !this.vwr.headless && !this.vwr.autoExit && this.vwr.haveDisplay && this.outputBuffer == null && this.allowJSThreads);
  });
  Clazz.defineMethod (c$, "executeCommands",
   function (isTry, reportCompletion) {
  var haveError = false;
  try {
  if (!this.dispatchCommands (false, false, isTry)) return;
  } catch (e$$) {
  if (Clazz.exceptionOf (e$$, Error)) {
  var er = e$$;
  {
  this.vwr.handleError (er, false);
  this.setErrorMessage ("" + er + " " + this.vwr.getShapeErrorState ());
  this.errorMessageUntranslated = "" + er;
  this.report (this.errorMessage, true);
  haveError = true;
  }
  } else if (Clazz.exceptionOf (e$$, JS.ScriptException)) {
  var e = e$$;
  {
  if (Clazz.instanceOf (e, JS.ScriptInterruption) && (!isTry || !e.isError)) {
  return;
  }if (isTry) {
  this.vwr.setStringProperty ("_errormessage", "" + e);
  return;
  }this.setErrorMessage (e.toString ());
  this.errorMessageUntranslated = e.getErrorMessageUntranslated ();
  this.report (this.errorMessage, true);
  this.vwr.notifyError ((this.errorMessage != null && this.errorMessage.indexOf ("java.lang.OutOfMemoryError") >= 0 ? "Error" : "ScriptException"), this.errorMessage, this.errorMessageUntranslated);
  haveError = true;
  }
  } else {
  throw e$$;
  }
  }
  if (haveError || !this.isJS || !this.allowJSThreads) {
  this.vwr.setTainted (true);
  this.vwr.popHoldRepaint ("executeCommands" + " " + (this.scriptLevel > 0 ? "\u0001## REPAINT_IGNORE ##" : ""));
  }this.timeEndExecution = System.currentTimeMillis ();
  if (this.errorMessage == null && this.executionStopped) this.setErrorMessage ("execution interrupted");
   else if (!this.tQuiet && reportCompletion) this.vwr.scriptStatus ("Script completed");
  this.executing = this.chk = this.isCmdLine_c_or_C_Option = this.historyDisabled = false;
  var msg = this.getErrorMessageUntranslated ();
  this.vwr.setErrorMessage (this.errorMessage, msg);
  if (!this.tQuiet && reportCompletion) this.vwr.setScriptStatus ("Jmol script terminated", this.errorMessage, 1 + (this.timeEndExecution - this.timeBeginExecution), msg);
  }, "~B,~B");
  Clazz.overrideMethod (c$, "resumeEval",
  function (sc) {
  this.setErrorMessage (null);
  if (this.executionStopped || sc == null || !sc.mustResumeEval) {
  this.resumeViewer ("resumeEval");
  return;
  }if (!this.executionPaused) sc.pc++;
  this.thisContext = sc;
  if (sc.scriptLevel > 0) this.scriptLevel = sc.scriptLevel - 1;
  this.restoreScriptContext (sc, true, false, false);
  this.pcResume = sc.pc;
  this.executeCommands (sc.isTryCatch, this.scriptLevel <= 0);
  this.pcResume = -1;
  }, "JS.ScriptContext");
  Clazz.defineMethod (c$, "resumeViewer",
   function (why) {
  this.vwr.setTainted (true);
  this.vwr.popHoldRepaint (why + (this.chk ? "\u0001## REPAINT_IGNORE ##" : ""));
  this.vwr.queueOnHold = false;
  }, "~S");
  Clazz.overrideMethod (c$, "runScript",
  function (script) {
  if (!this.vwr.isPreviewOnly) this.runScriptBuffer (script, this.outputBuffer, false);
  }, "~S");
  Clazz.overrideMethod (c$, "runScriptBuffer",
  function (script, outputBuffer, isFuncReturn) {
  this.pushContext (null, "runScriptBuffer");
  this.contextPath += " >> script() ";
  this.outputBuffer = outputBuffer;
  this.allowJSThreads = false;
  var fret = this.isFuncReturn;
  this.isFuncReturn = new Boolean (this.isFuncReturn | isFuncReturn).valueOf ();
  if (this.compileScript (null, script + "\u0001## EDITOR_IGNORE ##" + "\u0001## REPAINT_IGNORE ##", false)) this.dispatchCommands (false, false, false);
  this.popContext (false, false);
  this.isFuncReturn = fret;
  }, "~S,JU.SB,~B");
  Clazz.overrideMethod (c$, "checkScriptSilent",
  function (script) {
  var sc = this.compiler.compile (null, script, false, true, false, true);
  if (sc.errorType != null) return sc;
  this.restoreScriptContext (sc, false, false, false);
  this.chk = true;
  this.isCmdLine_c_or_C_Option = this.isCmdLine_C_Option = false;
  this.pc = 0;
  try {
  this.dispatchCommands (false, false, false);
  } catch (e) {
  if (Clazz.exceptionOf (e, JS.ScriptException)) {
  this.setErrorMessage (e.toString ());
  sc = this.getScriptContext ("checkScriptSilent");
  } else {
  throw e;
  }
  }
  this.chk = false;
  return sc;
  }, "~S");
  c$.getContextTrace = Clazz.defineMethod (c$, "getContextTrace",
  function (vwr, sc, sb, isTop) {
  if (sb == null) sb =  new JU.SB ();
  var pc = Math.min (sc.pc, sc.lineNumbers[sc.lineNumbers.length - 1]);
  sb.append (JS.ScriptError.getErrorLineMessage (sc.functionName, sc.scriptFileName, sc.lineNumbers[pc], pc, JS.ScriptEval.statementAsString (vwr, sc.statement, (isTop ? sc.iToken : 9999), false)));
  if (sc.parentContext != null) JS.ScriptEval.getContextTrace (vwr, sc.parentContext, sb, false);
  return sb;
  }, "JV.Viewer,JS.ScriptContext,JU.SB,~B");
  Clazz.overrideMethod (c$, "setDebugging",
  function () {
  this.debugScript = this.vwr.getBoolean (603979825);
  this.debugHigh = (this.debugScript && JU.Logger.debugging);
  });
  Clazz.overrideMethod (c$, "haltExecution",
  function () {
  this.resumePausedExecution ();
  this.executionStopped = true;
  });
  Clazz.overrideMethod (c$, "pauseExecution",
  function (withDelay) {
  if (this.chk || this.vwr.headless) return;
  if (withDelay && !this.isJS) this.delayScript (-100);
  this.vwr.popHoldRepaint ("pauseExecution " + withDelay);
  this.executionStepping = false;
  this.executionPaused = true;
  }, "~B");
  Clazz.overrideMethod (c$, "stepPausedExecution",
  function () {
  this.executionStepping = true;
  this.executionPaused = false;
  });
  Clazz.overrideMethod (c$, "resumePausedExecution",
  function () {
  this.executionPaused = false;
  this.executionStepping = false;
  });
  Clazz.overrideMethod (c$, "isExecuting",
  function () {
  return this.executing && !this.executionStopped;
  });
  Clazz.overrideMethod (c$, "isPaused",
  function () {
  return this.executionPaused;
  });
  Clazz.overrideMethod (c$, "isStepping",
  function () {
  return this.executionStepping;
  });
  Clazz.overrideMethod (c$, "isStopped",
  function () {
  return this.executionStopped || !this.isJS && this.currentThread !== Thread.currentThread ();
  });
  Clazz.overrideMethod (c$, "getNextStatement",
  function () {
  return (this.pc < this.aatoken.length ? JS.ScriptError.getErrorLineMessage (this.functionName, this.scriptFileName, this.getLinenumber (null), this.pc, JS.ScriptEval.statementAsString (this.vwr, this.aatoken[this.pc], -9999, this.debugHigh)) : "");
  });
  Clazz.defineMethod (c$, "getCommand",
   function (pc, allThisLine, addSemi) {
  if (pc >= this.lineIndices.length) return "";
  if (allThisLine) {
  var pt0 = -1;
  var pt1 = this.script.length;
  for (var i = 0; i < this.lineNumbers.length; i++) if (this.lineNumbers[i] == this.lineNumbers[pc]) {
  if (pt0 < 0) pt0 = this.lineIndices[i][0];
  pt1 = this.lineIndices[i][1];
  } else if (this.lineNumbers[i] == 0 || this.lineNumbers[i] > this.lineNumbers[pc]) {
  break;
  }
  var s = this.script;
  if (s.indexOf ('\1') >= 0) s = s.substring (0, s.indexOf ('\1'));
  if (pt1 == s.length - 1 && s.endsWith ("}")) pt1++;
  return (pt0 == s.length || pt1 < pt0 ? "" : s.substring (Math.max (pt0, 0), Math.min (s.length, pt1)));
  }var ichBegin = this.lineIndices[pc][0];
  var ichEnd = this.lineIndices[pc][1];
  var s = "";
  if (ichBegin < 0 || ichEnd <= ichBegin || ichEnd > this.script.length) return "";
  try {
  s = this.script.substring (ichBegin, ichEnd);
  if (s.indexOf ("\\\n") >= 0) s = JU.PT.rep (s, "\\\n", "  ");
  if (s.indexOf ("\\\r") >= 0) s = JU.PT.rep (s, "\\\r", "  ");
  if (s.length > 0 && !s.endsWith (";")) s += ";";
  } catch (e) {
  if (Clazz.exceptionOf (e, Exception)) {
  JU.Logger.error ("darn problem in Eval getCommand: ichBegin=" + ichBegin + " ichEnd=" + ichEnd + " len = " + this.script.length + "\n" + e);
  } else {
  throw e;
  }
  }
  return s;
  }, "~N,~B,~B");
  Clazz.defineMethod (c$, "logDebugScript",
   function (st, ifLevel) {
  this.iToken = -9999;
  if (this.debugHigh) {
  if (st.length > 0) JU.Logger.debug (st[0].toString ());
  for (var i = 1; i < st.length; ++i) if (st[i] != null) JU.Logger.debug (st[i].toString ());
  
  var strbufLog =  new JU.SB ();
  var s = (ifLevel > 0 ? "                          ".substring (0, ifLevel * 2) : "");
  strbufLog.append (s).append (JS.ScriptEval.statementAsString (this.vwr, st, this.iToken, this.debugHigh));
  this.vwr.scriptStatus (strbufLog.toString ());
  } else {
  var cmd = this.getCommand (this.pc, false, false);
  if (cmd !== "") this.vwr.scriptStatus (cmd);
  }}, "~A,~N");
  Clazz.overrideMethod (c$, "evaluateExpression",
  function (expr, asVariable, compileOnly) {
  var e = ( new JS.ScriptEval ()).setViewer (this.vwr);
  try {
  e.thisContext = this.thisContext;
  e.contextVariables = this.contextVariables;
  e.pushContext (null, "evalExp");
  e.allowJSThreads = false;
  } catch (e1) {
  if (Clazz.exceptionOf (e1, JS.ScriptException)) {
  } else {
  throw e1;
  }
  }
  var exec0 = this.executing;
  var o = (e.evaluate (expr, asVariable, compileOnly));
  this.executing = exec0;
  return o;
  }, "~O,~B,~B");
  Clazz.defineMethod (c$, "evaluate",
   function (expr, asVariable, compileOnly) {
  try {
  if (Clazz.instanceOf (expr, String)) {
  if (this.compileScript (null, "e_x_p_r_e_s_s_i_o_n = " + expr, false)) {
  if (compileOnly) return this.aatoken[0];
  this.setStatement (this.aatoken[0], 1);
  return (asVariable ? this.parameterExpressionList (2, -1, false).get (0) : this.parameterExpressionString (2, 0));
  }} else if (Clazz.instanceOf (expr, Array)) {
  var bs = this.atomExpression (expr, 0, 0, true, false, null, false);
  return (asVariable ? JS.SV.newV (10, bs) : bs);
  } else if (Clazz.instanceOf (expr, Array)) {
  this.setStatement ((expr)[0], 1);
  return (asVariable ? this.parameterExpressionList (0, -1, false).get (0) : this.parameterExpressionString (0, -1));
  }} catch (ex) {
  if (Clazz.exceptionOf (ex, Exception)) {
  JU.Logger.error ("Error evaluating: " + expr + "\n" + ex);
  } else {
  throw ex;
  }
  }
  return (asVariable ? JS.SV.getVariable ("ERROR") : "ERROR");
  }, "~O,~B,~B");
  Clazz.overrideMethod (c$, "checkSelect",
  function (h, where) {
  var ok = false;
  try {
  this.pushContext (null, "checkSelect");
  ok = this.parameterExpressionSelect (h, where);
  } catch (ex) {
  if (Clazz.exceptionOf (ex, Exception)) {
  JU.Logger.error ("checkSelect " + ex);
  } else {
  throw ex;
  }
  }
  this.popContext (false, false);
  return ok;
  }, "java.util.Map,~A");
  Clazz.overrideMethod (c$, "getAtomBitSet",
  function (atomExpression) {
  if (Clazz.instanceOf (atomExpression, JU.BS)) return atomExpression;
  var bs =  new JU.BS ();
  var executing = this.executing;
  try {
  this.pushContext (null, "getAtomBitSet");
  var scr = "select (" + atomExpression + ")";
  scr = JU.PT.replaceAllCharacters (scr, "\n\r", "),(");
  scr = JU.PT.rep (scr, "()", "(none)");
  if (this.compileScript (null, scr, false)) {
  this.st = this.aatoken[0];
  this.setStatement (this.st, 0);
  bs = this.atomExpression (this.st, 1, 0, false, false, null, true);
  }this.popContext (false, false);
  } catch (ex) {
  if (Clazz.exceptionOf (ex, Exception)) {
  JU.Logger.error ("getAtomBitSet " + atomExpression + "\n" + ex);
  } else {
  throw ex;
  }
  }
  this.executing = executing;
  return bs;
  }, "~O");
  Clazz.defineMethod (c$, "compileScript",
  function (filename, strScript, debugCompiler) {
  this.scriptFileName = filename;
  strScript = this.fixScriptPath (strScript, filename);
  this.restoreScriptContext (this.compiler.compile (filename, strScript, false, false, debugCompiler && JU.Logger.debugging, false), false, false, false);
  this.$isStateScript = this.compiler.isStateScript;
  this.forceNoAddHydrogens = (this.$isStateScript && this.script.indexOf ("pdbAddHydrogens") < 0);
  var s = this.script;
  this.pc = this.setScriptExtensions ();
  if (!this.chk && this.vwr.scriptEditorVisible && strScript.indexOf ("\u0001## EDITOR_IGNORE ##") < 0) this.vwr.scriptStatus ("");
  this.script = s;
  return !this.$error;
  }, "~S,~S,~B");
  Clazz.defineMethod (c$, "fixScriptPath",
   function (strScript, filename) {
  if (filename != null && strScript.indexOf ("$SCRIPT_PATH$") >= 0) {
  var path = filename;
  var pt = Math.max (filename.lastIndexOf ("|"), filename.lastIndexOf ("/"));
  path = path.substring (0, pt + 1);
  strScript = JU.PT.rep (strScript, "$SCRIPT_PATH$/", path);
  strScript = JU.PT.rep (strScript, "$SCRIPT_PATH$", path);
  }return strScript;
  }, "~S,~S");
  Clazz.defineMethod (c$, "setScriptExtensions",
   function () {
  var extensions = this.scriptExtensions;
  if (extensions == null) return 0;
  var pt = extensions.indexOf ("##SCRIPT_STEP");
  if (pt >= 0) {
  this.executionStepping = true;
  }pt = extensions.indexOf ("##SCRIPT_START=");
  if (pt < 0) return 0;
  pt = JU.PT.parseInt (extensions.substring (pt + 15));
  if (pt == -2147483648) return 0;
  for (this.pc = 0; this.pc < this.lineIndices.length; this.pc++) {
  if (this.lineIndices[this.pc][0] > pt || this.lineIndices[this.pc][1] >= pt) break;
  }
  if (this.pc > 0 && this.pc < this.lineIndices.length && this.lineIndices[this.pc][0] > pt) --this.pc;
  return this.pc;
  });
  Clazz.defineMethod (c$, "compileScriptFileInternal",
   function (filename, localPath, remotePath, scriptPath) {
  if (filename.toLowerCase ().indexOf ("javascript:") == 0) return this.compileScript (filename, this.vwr.jsEval (filename.substring (11)), this.debugScript);
  var data =  new Array (2);
  data[0] = filename;
  if (!this.vwr.fm.getFileDataAsString (data, -1, false, true, false)) {
  this.setErrorMessage ("io error reading " + data[0] + ": " + data[1]);
  return false;
  }var movieScript = "";
  if (("\n" + data[1]).indexOf ("\nJmolManifest.txt\n") >= 0) {
  var path;
  if (filename.endsWith (".all.pngj") || filename.endsWith (".all.png")) {
  path = "|state.spt";
  filename += "|";
  } else {
  if (data[1].indexOf ("movie.spt") >= 0) {
  data[0] = filename + "|movie.spt";
  if (this.vwr.fm.getFileDataAsString (data, -1, false, true, false)) {
  movieScript = data[1];
  }}filename += "|JmolManifest.txt";
  data[0] = filename;
  if (!this.vwr.fm.getFileDataAsString (data, -1, false, true, false)) {
  this.setErrorMessage ("io error reading " + data[0] + ": " + data[1]);
  return false;
  }path = JV.FileManager.getManifestScriptPath (data[1]);
  }if (path != null && path.length > 0) {
  data[0] = filename = filename.substring (0, filename.lastIndexOf ("|")) + path;
  if (!this.vwr.fm.getFileDataAsString (data, -1, false, true, false)) {
  this.setErrorMessage ("io error reading " + data[0] + ": " + data[1]);
  return false;
  }}if (filename.endsWith ("|state.spt")) {
  this.vwr.g.setO ("_pngjFile", filename.substring (0, filename.length - 10) + "?");
  }}this.scriptFileName = filename;
  data[1] = JV.FileManager.getEmbeddedScript (data[1]);
  var script = this.fixScriptPath (data[1], data[0]);
  if (scriptPath == null) {
  scriptPath = this.vwr.fm.getFilePath (filename, false, false);
  scriptPath = scriptPath.substring (0, Math.max (scriptPath.lastIndexOf ("|"), scriptPath.lastIndexOf ("/")));
  }script = JV.FileManager.setScriptFileReferences (script, localPath, remotePath, scriptPath);
  return this.compileScript (filename, script + movieScript, this.debugScript);
  }, "~S,~S,~S,~S");
  Clazz.overrideMethod (c$, "evalFunctionFloat",
  function (func, params, values) {
  try {
  var p = params;
  for (var i = 0; i < values.length; i++) p.get (i).value = Float.$valueOf (values[i]);
  
  var f = func;
  return JS.SV.fValue (this.runFunctionAndRet (f, f.name, p, null, true, false, false));
  } catch (e) {
  if (Clazz.exceptionOf (e, Exception)) {
  return NaN;
  } else {
  throw e;
  }
  }
  }, "~O,~O,~A");
  Clazz.defineMethod (c$, "getUserFunctionResult",
  function (name, params, tokenAtom) {
  return this.runFunctionAndRet (null, name, params, tokenAtom, true, true, false);
  }, "~S,JU.Lst,JS.SV");
  Clazz.defineMethod (c$, "runFunctionAndRet",
   function ($function, name, params, tokenAtom, getReturn, setContextPath, allowThreads) {
  if ($function == null) {
  name = name.toLowerCase ();
  $function = this.vwr.getFunction (name);
  if ($function == null) return null;
  if (setContextPath) this.contextPath += " >> function " + name;
  } else if (setContextPath) {
  this.contextPath += " >> " + name;
  }this.pushContext (null, "runFunctionAndRet ");
  if (this.allowJSThreads) this.allowJSThreads = allowThreads;
  var isTry = ($function.getTok () == 364558);
  this.thisContext.isTryCatch = isTry;
  this.thisContext.isFunction = !isTry;
  this.functionName = name;
  if (isTry) {
  this.resetError ();
  this.thisContext.displayLoadErrorsSave = this.vwr.displayLoadErrors;
  this.thisContext.tryPt = ++this.vwr.tryPt;
  this.vwr.displayLoadErrors = false;
  this.restoreFunction ($function, params, tokenAtom);
  this.contextVariables.put ("_breakval", JS.SV.newI (2147483647));
  this.contextVariables.put ("_errorval", JS.SV.newS (""));
  var cv = this.contextVariables;
  this.executeCommands (true, false);
  while (this.thisContext.tryPt > this.vwr.tryPt) this.popContext (false, false);
  
  this.processTry (cv);
  return null;
  } else if (Clazz.instanceOf ($function, J.api.JmolParallelProcessor)) {
  {
  this.parallelProcessor = $function;
  this.restoreFunction ($function, params, tokenAtom);
  this.dispatchCommands (false, true, false);
  ($function).runAllProcesses (this.vwr);
  }} else {
  this.restoreFunction ($function, params, tokenAtom);
  this.dispatchCommands (false, true, false);
  }var v = (getReturn ? this.getContextVariableAsVariable ("_retval", false) : null);
  this.popContext (false, false);
  return v;
  }, "J.api.JmolScriptFunction,~S,JU.Lst,JS.SV,~B,~B,~B");
  Clazz.defineMethod (c$, "processTry",
   function (cv) {
  this.vwr.displayLoadErrors = this.thisContext.displayLoadErrorsSave;
  this.popContext (false, false);
  var err = this.vwr.getP ("_errormessage");
  if (err.length > 0) {
  cv.put ("_errorval", JS.SV.newS (err));
  this.resetError ();
  }cv.put ("_tryret", cv.get ("_retval"));
  var ret = cv.get ("_tryret");
  if (ret.value != null || ret.intValue != 2147483647) {
  this.cmdReturn (ret);
  return;
  }var errMsg = (cv.get ("_errorval")).value;
  if (errMsg.length == 0) {
  var iBreak = (cv.get ("_breakval")).intValue;
  if (iBreak != 2147483647) {
  this.breakAt (this.pc - iBreak);
  return;
  }}if (this.pc + 1 < this.aatoken.length && this.aatoken[this.pc + 1][0].tok == 102412) {
  var ct = this.aatoken[this.pc + 1][0];
  if (ct.contextVariables != null && ct.name0 != null) ct.contextVariables.put (ct.name0, JS.SV.newS (errMsg));
  ct.intValue = (errMsg.length > 0 ? 1 : -1) * Math.abs (ct.intValue);
  }}, "java.util.Map");
  Clazz.defineMethod (c$, "breakAt",
   function (pt) {
  if (pt < 0) {
  this.getContextVariableAsVariable ("_breakval", false).intValue = -pt;
  this.pcEnd = this.pc;
  return;
  }var ptEnd = Math.abs (this.aatoken[pt][0].intValue);
  var tok = this.aatoken[pt][0].tok;
  if (tok == 102411 || tok == 102413) {
  this.theToken = this.aatoken[ptEnd--][0];
  var ptNext = Math.abs (this.theToken.intValue);
  if (this.theToken.tok != 102409) this.theToken.intValue = -ptNext;
  } else {
  this.pc = -1;
  while (this.pc != pt && this.thisContext != null) {
  while (this.thisContext != null && !JS.ScriptCompiler.isBreakableContext (this.thisContext.token.tok)) this.popContext (true, false);
  
  this.pc = this.thisContext.pc;
  this.popContext (true, false);
  }
  }this.pc = ptEnd;
  }, "~N");
  Clazz.defineMethod (c$, "restoreFunction",
   function (f, params, tokenAtom) {
  var $function = f;
  this.aatoken = $function.aatoken;
  this.lineNumbers = $function.lineNumbers;
  this.lineIndices = $function.lineIndices;
  this.script = $function.script;
  this.pc = 0;
  if ($function.names != null) {
  this.contextVariables =  new java.util.Hashtable ();
  $function.setVariables (this.contextVariables, params);
  }if (tokenAtom != null) this.contextVariables.put ("_x", tokenAtom);
  }, "J.api.JmolScriptFunction,JU.Lst,JS.SV");
  Clazz.defineMethod (c$, "clearDefinedVariableAtomSets",
  function () {
  this.vwr.definedAtomSets.remove ("# variable");
  });
  Clazz.defineMethod (c$, "defineSets",
   function () {
  if (!this.vwr.definedAtomSets.containsKey ("# static")) {
  for (var i = 0; i < JV.JC.predefinedStatic.length; i++) this.defineAtomSet (JV.JC.predefinedStatic[i]);
  
  this.defineAtomSet ("# static");
  }if (this.vwr.definedAtomSets.containsKey ("# variable")) return;
  for (var i = 0; i < JV.JC.predefinedVariable.length; i++) this.defineAtomSet (JV.JC.predefinedVariable[i]);
  
  for (var i = JU.Elements.elementNumberMax; --i >= 0; ) {
  var definition = " elemno=" + i;
  this.defineAtomSet ("@" + JU.Elements.elementNameFromNumber (i) + definition);
  this.defineAtomSet ("@_" + JU.Elements.elementSymbolFromNumber (i) + definition);
  }
  for (var i = 4; --i >= 0; ) {
  var definition = "@" + JU.Elements.altElementNameFromIndex (i) + " _e=" + JU.Elements.altElementNumberFromIndex (i);
  this.defineAtomSet (definition);
  }
  for (var i = JU.Elements.altElementMax; --i >= 4; ) {
  var ei = JU.Elements.altElementNumberFromIndex (i);
  var def = " _e=" + ei;
  var definition = "@_" + JU.Elements.altElementSymbolFromIndex (i);
  this.defineAtomSet (definition + def);
  definition = "@_" + JU.Elements.altIsotopeSymbolFromIndex (i);
  this.defineAtomSet (definition + def);
  definition = "@_" + JU.Elements.altIsotopeSymbolFromIndex2 (i);
  this.defineAtomSet (definition + def);
  definition = "@" + JU.Elements.altElementNameFromIndex (i);
  if (definition.length > 1) this.defineAtomSet (definition + def);
  var e = JU.Elements.getElementNumber (ei);
  ei = JU.Elements.getNaturalIsotope (e);
  if (ei > 0) {
  def = JU.Elements.elementSymbolFromNumber (e);
  this.defineAtomSet ("@_" + def + ei + " _e=" + e);
  this.defineAtomSet ("@_" + ei + def + " _e=" + e);
  }}
  this.defineAtomSet ("# variable");
  });
  Clazz.defineMethod (c$, "defineAtomSet",
   function (script) {
  if (script.indexOf ("#") == 0) {
  this.vwr.definedAtomSets.put (script, Boolean.TRUE);
  return;
  }var sc = this.compiler.compile ("#predefine", script, true, false, false, false);
  if (sc.errorType != null) {
  this.vwr.scriptStatus ("JmolConstants.java ERROR: predefined set compile error:" + script + "\ncompile error:" + sc.errorMessageUntranslated);
  return;
  }if (sc.getTokenCount () != 1) {
  this.vwr.scriptStatus ("JmolConstants.java ERROR: predefinition does not have exactly 1 command:" + script);
  return;
  }var statement = sc.getToken (0);
  if (statement.length <= 2) {
  this.vwr.scriptStatus ("JmolConstants.java ERROR: bad predefinition length:" + script);
  return;
  }var tok = statement[1].tok;
  if (!JS.T.tokAttr (tok, 1073741824) && !JS.T.tokAttr (tok, 2097152)) {
  this.vwr.scriptStatus ("JmolConstants.java ERROR: invalid variable name:" + script);
  return;
  }var name = (statement[1].value).toLowerCase ();
  if (name.startsWith ("dynamic_")) name = "!" + name.substring (8);
  this.vwr.definedAtomSets.put (name, statement);
  }, "~S");
  Clazz.defineMethod (c$, "lookupIdentifierValue",
  function (identifier) {
  var bs = this.lookupValue (identifier, false);
  if (bs != null) return JU.BSUtil.copy (bs);
  bs = this.getAtomBits (1073741824, identifier);
  return (bs == null ?  new JU.BS () : bs);
  }, "~S");
  Clazz.defineMethod (c$, "lookupValue",
   function (setName, plurals) {
  if (this.chk) {
  return  new JU.BS ();
  }this.defineSets ();
  setName = setName.toLowerCase ();
  var value = this.vwr.definedAtomSets.get (setName);
  var isDynamic = false;
  if (value == null) {
  value = this.vwr.definedAtomSets.get ("!" + setName);
  isDynamic = (value != null);
  }if (Clazz.instanceOf (value, JU.BS)) return value;
  if (Clazz.instanceOf (value, Array)) {
  this.pushContext (null, "lookupValue");
  var bs = this.atomExpression (value, -2, 0, true, false, null, true);
  this.popContext (false, false);
  if (!isDynamic) this.vwr.definedAtomSets.put (setName, bs);
  return bs;
  }if (setName.equals ("water")) {
  var bs = this.vwr.ms.getAtoms (1612709912, null);
  if (!isDynamic) this.vwr.definedAtomSets.put (setName, bs);
  return bs;
  }if (plurals) return null;
  var len = setName.length;
  if (len < 5) return null;
  if (setName.charAt (len - 1) != 's') return null;
  if (setName.endsWith ("ies")) setName = setName.substring (0, len - 3) + 'y';
   else setName = setName.substring (0, len - 1);
  return this.lookupValue (setName, true);
  }, "~S,~B");
  Clazz.overrideMethod (c$, "deleteAtomsInVariables",
  function (bsDeleted) {
  for (var entry, $entry = this.vwr.definedAtomSets.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) {
  var value = entry.getValue ();
  if (Clazz.instanceOf (value, JU.BS)) {
  JU.BSUtil.deleteBits (value, bsDeleted);
  if (!entry.getKey ().startsWith ("!")) this.vwr.g.setUserVariable ("@" + entry.getKey (), JS.SV.newV (10, value));
  }}
  }, "JU.BS");
  Clazz.overrideMethod (c$, "getThisContext",
  function () {
  return this.thisContext;
  });
  Clazz.defineMethod (c$, "clearState",
   function (tQuiet) {
  this.thisContext = null;
  this.scriptLevel = 0;
  this.setErrorMessage (null);
  this.contextPath = "";
  this.tQuiet = tQuiet;
  }, "~B");
  Clazz.overrideMethod (c$, "pushContextDown",
  function (why) {
  this.scriptLevel--;
  this.pushContext2 (null, why);
  }, "~S");
  Clazz.defineMethod (c$, "pushContext",
   function (token, why) {
  if (this.scriptLevel == JS.ScriptEval.contextDepthMax) this.error (44);
  this.pushContext2 (token, why);
  }, "JS.ContextToken,~S");
  Clazz.defineMethod (c$, "pushContext2",
   function (token, why) {
  this.thisContext = this.getScriptContext (why);
  this.thisContext.token = token;
  if (token == null) {
  this.scriptLevel = ++this.thisContext.scriptLevel;
  } else {
  this.thisContext.scriptLevel = -1;
  this.contextVariables =  new java.util.Hashtable ();
  if (token.contextVariables != null) for (var key, $key = token.contextVariables.keySet ().iterator (); $key.hasNext () && ((key = $key.next ()) || true);) JS.ScriptCompiler.addContextVariable (this.contextVariables, key);
  
  }if (this.debugHigh || this.isCmdLine_c_or_C_Option) JU.Logger.info ("-->>----------------------".substring (0, Math.min (15, this.scriptLevel + 5)) + this.scriptLevel + " " + this.scriptFileName + " " + token + " " + this.thisContext.id + " " + why + " path=" + this.thisContext.contextPath);
  }, "JS.ContextToken,~S");
  Clazz.overrideMethod (c$, "getScriptContext",
  function (why) {
  var context =  new JS.ScriptContext ();
  if (this.debugHigh) JU.Logger.info ("creating context " + context.id + " for " + why + " path=" + this.contextPath);
  context.scriptLevel = this.scriptLevel;
  context.parentContext = this.thisContext;
  context.contextPath = this.contextPath;
  context.scriptFileName = this.scriptFileName;
  context.parallelProcessor = this.parallelProcessor;
  context.functionName = this.functionName;
  context.script = this.script;
  context.lineNumbers = this.lineNumbers;
  context.lineIndices = this.lineIndices;
  context.saveTokens (this.aatoken);
  context.statement = this.st;
  context.statementLength = this.slen;
  context.pc = context.pc0 = this.pc;
  context.lineEnd = this.lineEnd;
  context.pcEnd = this.pcEnd;
  context.iToken = this.iToken;
  context.theToken = this.theToken;
  context.theTok = this.theTok;
  context.outputBuffer = this.outputBuffer;
  context.vars = this.contextVariables;
  context.isStateScript = this.$isStateScript;
  context.errorMessage = this.errorMessage;
  context.errorType = this.errorType;
  context.iCommandError = this.iCommandError;
  context.chk = this.chk;
  context.executionStepping = this.executionStepping;
  context.executionPaused = this.executionPaused;
  context.scriptExtensions = this.scriptExtensions;
  context.mustResumeEval = this.mustResumeEval;
  context.allowJSThreads = this.allowJSThreads;
  return context;
  }, "~S");
  Clazz.defineMethod (c$, "popContext",
  function (isFlowCommand, statementOnly) {
  if (this.thisContext == null) return;
  if (this.thisContext.scriptLevel > 0) this.scriptLevel = this.thisContext.scriptLevel - 1;
  var scTemp = (isFlowCommand ? this.getScriptContext ("popFlow") : null);
  this.restoreScriptContext (this.thisContext, true, isFlowCommand, statementOnly);
  if (scTemp != null) this.restoreScriptContext (scTemp, true, false, true);
  if (this.debugHigh || this.isCmdLine_c_or_C_Option) JU.Logger.info ("--<<------------".substring (0, Math.min (15, this.scriptLevel + 5)) + (this.scriptLevel + 1) + " " + this.scriptFileName + " isFlow " + isFlowCommand + " thisContext=" + (this.thisContext == null ? "" : "" + this.thisContext.id) + " pc=" + this.pc + "-->" + this.pc + " path=" + (this.thisContext == null ? "" : this.thisContext.contextPath));
  }, "~B,~B");
  Clazz.defineMethod (c$, "restoreScriptContext",
  function (context, isPopContext, isFlowCommand, statementOnly) {
  this.executing = !this.chk;
  if (context == null) return;
  if (!isFlowCommand) {
  this.st = context.statement;
  this.slen = context.statementLength;
  this.pc = context.pc;
  this.lineEnd = context.lineEnd;
  this.pcEnd = context.pcEnd;
  if (statementOnly) return;
  }this.mustResumeEval = context.mustResumeEval;
  this.script = context.script;
  this.lineNumbers = context.lineNumbers;
  this.lineIndices = context.lineIndices;
  this.aatoken = context.restoreTokens ();
  this.contextVariables = context.vars;
  this.scriptExtensions = context.scriptExtensions;
  if (isPopContext) {
  this.contextPath = context.contextPath;
  var pt = (this.contextPath == null ? -1 : this.contextPath.indexOf (" >> "));
  if (pt >= 0) this.contextPath = this.contextPath.substring (0, pt);
  this.scriptFileName = context.scriptFileName;
  this.parallelProcessor = context.parallelProcessor;
  this.functionName = context.functionName;
  this.iToken = context.iToken;
  this.theToken = context.theToken;
  this.theTok = context.theTok;
  this.outputBuffer = context.outputBuffer;
  this.$isStateScript = context.isStateScript;
  this.thisContext = context.parentContext;
  this.allowJSThreads = context.allowJSThreads;
  if (this.debugHigh || this.isCmdLine_c_or_C_Option) JU.Logger.info ("--r------------".substring (0, Math.min (15, this.scriptLevel + 5)) + this.scriptLevel + " " + this.scriptFileName + " isPop " + isPopContext + " isFlow " + isFlowCommand + " context.id=" + context.id + " pc=" + this.pc + "-->" + context.pc + " " + this.contextPath);
  } else {
  this.$error = (context.errorType != null);
  this.errorMessage = context.errorMessage;
  this.errorMessageUntranslated = context.errorMessageUntranslated;
  this.iCommandError = context.iCommandError;
  this.errorType = context.errorType;
  }}, "JS.ScriptContext,~B,~B,~B");
  Clazz.defineMethod (c$, "setException",
  function (sx, msg, untranslated) {
  sx.untranslated = (untranslated == null ? msg : untranslated);
  var isThrown = "!".equals (untranslated);
  this.errorType = msg;
  this.iCommandError = this.pc;
  if (sx.message == null) {
  sx.message = "";
  return;
  }var s = JS.ScriptEval.getContextTrace (this.vwr, this.getScriptContext ("setException"), null, true).toString ();
  while (this.thisContext != null && !this.thisContext.isTryCatch) this.popContext (false, false);
  
  if (sx.message.indexOf (s) < 0) {
  sx.message += s;
  sx.untranslated += s;
  }this.resumeViewer (isThrown ? "throw context" : "scriptException");
  if (isThrown || this.thisContext != null || this.chk || msg.indexOf ("NOTE: file recognized as a script file: ") >= 0) return;
  JU.Logger.error ("eval ERROR: " + s + this.toString ());
  if (this.vwr.autoExit) this.vwr.exitJmol ();
  }, "JS.ScriptException,~S,~S");
  c$.statementAsString = Clazz.defineMethod (c$, "statementAsString",
  function (vwr, statement, iTok, doLogMessages) {
  if (statement.length == 0) return "";
  var sb =  new JU.SB ();
  var tok = statement[0].tok;
  switch (tok) {
  case 0:
  return statement[0].value;
  case 102409:
  if (statement.length == 2 && (statement[1].tok == 134320141 || statement[1].tok == 102436)) return ((statement[1].value)).toString ();
  }
  var useBraces = true;
  var inBrace = false;
  var inClauseDefine = false;
  var setEquals = (statement.length > 1 && tok == 36867 && statement[0].value.equals ("") && (statement[0].intValue == 61 || statement[0].intValue == 35) && statement[1].tok != 1073742325);
  var len = statement.length;
  for (var i = 0; i < len; ++i) {
  var token = statement[i];
  if (token == null) {
  len = i;
  break;
  }if (iTok == i - 1) sb.append (" <<");
  if (i != 0) sb.appendC (' ');
  if (i == 2 && setEquals) {
  if ((setEquals = (token.tok != 268435860)) || statement[0].intValue == 35) {
  sb.append (setEquals ? "= " : "== ");
  if (!setEquals) continue;
  }}if (iTok == i && token.tok != 1073742326) sb.append ("<<<<");
  switch (token.tok) {
  case 1073742325:
  if (useBraces) sb.append ("{");
  continue;
  case 1073742326:
  if (inClauseDefine && i == statement.length - 1) useBraces = false;
  if (useBraces) sb.append ("}");
  continue;
  case 268435520:
  case 268435521:
  break;
  case 1073742332:
  case 1073742338:
  inBrace = (token.tok == 1073742332);
  break;
  case 12290:
  if (i > 0 && (token.value).equals ("define")) {
  sb.append ("@");
  if (i + 1 < statement.length && statement[i + 1].tok == 1073742325) {
  if (!useBraces) inClauseDefine = true;
  useBraces = true;
  }continue;
  }break;
  case 1073742335:
  sb.append ("true");
  continue;
  case 1073742334:
  sb.append ("false");
  continue;
  case 1275082245:
  break;
  case 2:
  sb.appendI (token.intValue);
  continue;
  case 8:
  case 9:
  case 10:
  sb.append (JS.SV.sValue (token));
  continue;
  case 6:
  if (Boolean.TRUE === (token.value).get ("$_BINARY_$")) {
  sb.append ("<BINARY DATA>");
  continue;
  }case 7:
  sb.append ((token).escape ());
  continue;
  case 5:
  sb.appendC ('^');
  continue;
  case 1073742363:
  if (token.intValue != 2147483647) sb.appendI (token.intValue);
   else sb.append (JM.Group.getSeqcodeStringFor (JS.ScriptExpr.getSeqCode (token)));
  token = statement[++i];
  sb.appendC (' ');
  sb.append (inBrace ? "-" : "- ");
  case 1073742362:
  if (token.intValue != 2147483647) sb.appendI (token.intValue);
   else sb.append (JM.Group.getSeqcodeStringFor (JS.ScriptExpr.getSeqCode (token)));
  continue;
  case 1073742357:
  sb.append ("*:");
  sb.append (vwr.getChainIDStr (token.intValue));
  continue;
  case 1073742355:
  sb.append ("*%");
  if (token.value != null) sb.append (token.value.toString ());
  continue;
  case 1073742358:
  sb.append ("*/");
  case 1073742359:
  case 3:
  if (token.intValue < 2147483647) {
  sb.append (JU.Escape.escapeModelFileNumber (token.intValue));
  } else {
  sb.append ("" + token.value);
  }continue;
  case 1073742361:
  sb.appendC ('[');
  var ptr = token.intValue * 6 + 1;
  sb.append (JM.Group.standardGroupList.substring (ptr, ptr + 3).trim ());
  sb.appendC (']');
  continue;
  case 1073742360:
  sb.appendC ('[');
  sb.appendO (token.value);
  sb.appendC (']');
  continue;
  case 1073742356:
  sb.append ("*.");
  break;
  case 1094713349:
  if (Clazz.instanceOf (token.value, JU.P3)) {
  var pt = token.value;
  sb.append ("cell=").append (JU.Escape.eP (pt));
  continue;
  }break;
  case 4:
  sb.append ("\"").appendO (token.value).append ("\"");
  continue;
  case 268435860:
  case 268435858:
  case 268435857:
  case 268435856:
  case 268435859:
  case 268435861:
  if (token.intValue == 1715472409) {
  sb.append (statement[++i].value).append (" ");
  } else if (token.intValue != 2147483647) sb.append (JS.T.nameOf (token.intValue)).append (" ");
  break;
  case 364558:
  continue;
  case 102409:
  sb.append ("end");
  continue;
  default:
  if (JS.T.tokAttr (token.tok, 1073741824) || !doLogMessages) break;
  sb.appendC ('\n').append (token.toString ()).appendC ('\n');
  continue;
  }
  if (token.value != null) sb.append (token.value.toString ());
  }
  return sb.toString ();
  }, "JV.Viewer,~A,~N,~B");
  Clazz.overrideMethod (c$, "setObjectPropSafe",
  function (id, tokCommand) {
  try {
  return this.setObjectProp (id, tokCommand, -1);
  } catch (e) {
  if (Clazz.exceptionOf (e, JS.ScriptException)) {
  return null;
  } else {
  throw e;
  }
  }
  }, "~S,~N");
  Clazz.defineMethod (c$, "setAtomProp",
  function (prop, value, bs) {
  this.setShapePropertyBs (0, prop, value, bs);
  }, "~S,~O,JU.BS");
  Clazz.defineMethod (c$, "restrictSelected",
  function (isBond, doInvert) {
  if (!this.chk) this.sm.restrictSelected (isBond, doInvert);
  }, "~B,~B");
  Clazz.defineMethod (c$, "showString",
  function (str) {
  this.showStringPrint (str, false);
  }, "~S");
  Clazz.overrideMethod (c$, "showStringPrint",
  function (s, mustDo) {
  if (this.chk || s == null) return;
  if (this.outputBuffer == null) this.vwr.showString (s, mustDo);
   else this.appendBuffer (s, mustDo);
  }, "~S,~B");
  Clazz.defineMethod (c$, "report",
  function (s, isError) {
  if (this.chk) return;
  if (this.outputBuffer == null) this.vwr.scriptStatus (s);
   else this.appendBuffer (s, isError);
  }, "~S,~B");
  Clazz.defineMethod (c$, "appendBuffer",
   function (str, mustDo) {
  if (mustDo || this.isFuncReturn || JU.Logger.isActiveLevel (4)) this.outputBuffer.append (str).appendC ('\n');
  }, "~S,~B");
  Clazz.defineMethod (c$, "addProcess",
   function (vProcess, pc, pt) {
  if (this.parallelProcessor == null) return;
  var statements =  new Array (pt);
  for (var i = 0; i < vProcess.size (); i++) statements[i + 1 - pc] = vProcess.get (i);
  
  var context = this.getScriptContext ("addProcess");
  context.saveTokens (statements);
  context.pc = 1 - pc;
  context.pcEnd = pt;
  this.parallelProcessor.addProcess ("p" + (++JS.ScriptEval.iProcess), context);
  }, "JU.Lst,~N,~N");
  Clazz.defineMethod (c$, "checkContinue",
   function () {
  if (this.executionStopped) return false;
  if (this.executionStepping && this.isCommandDisplayable (this.pc)) {
  this.vwr.setScriptStatus ("Next: " + this.getNextStatement (), "stepping -- type RESUME to continue", 0, null);
  this.executionPaused = true;
  } else if (!this.executionPaused) {
  return true;
  }if (JU.Logger.debugging) {
  JU.Logger.debug ("script execution paused at command " + (this.pc + 1) + " level " + this.scriptLevel + ": " + this.thisCommand);
  }this.refresh (false);
  while (this.executionPaused) {
  this.vwr.popHoldRepaint ("pause \u0001## REPAINT_IGNORE ##");
  var script = this.vwr.getInsertedCommand ();
  if (script.length > 0) {
  this.resumePausedExecution ();
  this.setErrorMessage (null);
  var scSave = this.getScriptContext ("script insertion");
  this.pc--;
  try {
  this.runScript (script);
  } catch (e$$) {
  if (Clazz.exceptionOf (e$$, Exception)) {
  var e = e$$;
  {
  this.setErrorMessage ("" + e);
  }
  } else if (Clazz.exceptionOf (e$$, Error)) {
  var er = e$$;
  {
  this.setErrorMessage ("" + er);
  }
  } else {
  throw e$$;
  }
  }
  if (this.$error) {
  this.report (this.errorMessage, true);
  this.setErrorMessage (null);
  }this.restoreScriptContext (scSave, true, false, false);
  this.pauseExecution (false);
  }this.doDelay (-100);
  this.vwr.pushHoldRepaintWhy ("pause");
  }
  this.notifyResumeStatus ();
  return !this.$error && !this.executionStopped;
  });
  Clazz.defineMethod (c$, "delayScript",
  function (millis) {
  if (this.vwr.autoExit) return;
  this.stopScriptThreads ();
  this.scriptDelayThread =  new JS.ScriptDelayThread (this, this.vwr, millis);
  this.scriptDelayThread.run ();
  }, "~N");
  Clazz.defineMethod (c$, "doDelay",
   function (millis) {
  if (!this.useThreads ()) return;
  if (this.isJS) throw  new JS.ScriptInterruption (this, "delay", millis);
  this.delayScript (millis);
  }, "~N");
  Clazz.overrideMethod (c$, "evalParallel",
  function (context, shapeManager) {
  return this.getCmdExt ().evalParallel (context, shapeManager);
  }, "JS.ScriptContext,JV.ShapeManager");
  Clazz.defineMethod (c$, "isCommandDisplayable",
   function (i) {
  if (i >= this.aatoken.length || i >= this.pcEnd || this.aatoken[i] == null) return false;
  return (this.lineIndices[i][1] > this.lineIndices[i][0]);
  }, "~N");
  Clazz.overrideMethod (c$, "loadFileResourceAsync",
  function (fileName) {
  this.loadFileAsync (null, fileName, -Math.abs (fileName.hashCode ()), false);
  }, "~S");
  Clazz.defineMethod (c$, "loadFileAsync",
  function (prefix, filename, i, doClear) {
  if (this.vwr.fm.cacheGet (filename, false) != null) return filename;
  if (prefix != null) prefix = "cache://local" + prefix;
  var key = this.pc + "_" + i + "_" + filename;
  var cacheName;
  if (this.thisContext == null || this.thisContext.htFileCache == null) {
  this.pushContext (null, "loadFileAsync");
  this.thisContext.htFileCache =  new java.util.Hashtable ();
  }cacheName = this.thisContext.htFileCache.get (key);
  if (cacheName != null && cacheName.length > 0) {
  this.fileLoadThread = null;
  this.popContext (false, false);
  this.vwr.queueOnHold = false;
  if ("#CANCELED#".equals (cacheName) || "#CANCELED#".equals (this.vwr.fm.cacheGet (cacheName, false))) this.evalError ("#CANCELED#", null);
  return cacheName;
  }this.thisContext.htFileCache.put (key, cacheName = prefix + System.currentTimeMillis ());
  if (doClear) this.vwr.cacheFileByName (prefix + "*", false);
  this.fileLoadThread =  new JS.FileLoadThread (this, this.vwr, filename, key, cacheName);
  if (this.vwr.testAsync) this.fileLoadThread.start ();
   else this.fileLoadThread.run ();
  if (i < 0) this.fileLoadThread = null;
  throw  new JS.ScriptInterruption (this, "load", 1);
  }, "~S,~S,~N,~B");
  Clazz.defineMethod (c$, "logLoadInfo",
   function (msg) {
  if (msg.length > 0) JU.Logger.info (msg);
  var sb =  new JU.SB ();
  var modelCount = this.vwr.ms.mc;
  if (modelCount > 1) sb.append ((this.vwr.am.isMovie ? this.vwr.am.getFrameCount () + " frames" : modelCount + " models") + "\n");
  for (var i = 0; i < modelCount; i++) {
  var moData = this.vwr.ms.getInfo (i, "moData");
  if (moData == null || !moData.containsKey ("mos")) continue;
  sb.appendI ((moData.get ("mos")).size ()).append (" molecular orbitals in model ").append (this.vwr.getModelNumberDotted (i)).append ("\n");
  }
  if (sb.length () > 0) this.vwr.showString (sb.toString (), false);
  }, "~S");
  Clazz.overrideMethod (c$, "notifyResumeStatus",
  function () {
  if (!this.chk && !this.executionStopped && !this.executionStepping && !this.executionPaused) {
  this.vwr.scriptStatus ("script execution " + (this.$error || this.executionStopped ? "interrupted" : "resumed"));
  }if (JU.Logger.debugging) JU.Logger.debug ("script execution resumed");
  });
  Clazz.defineMethod (c$, "refresh",
  function (doDelay) {
  if (this.chk) return;
  this.vwr.setTainted (true);
  this.vwr.requestRepaintAndWait ("refresh cmd");
  if (this.isJS && doDelay) this.doDelay (10);
  }, "~B");
  Clazz.overrideMethod (c$, "stopScriptThreads",
  function () {
  if (this.scriptDelayThread != null) {
  this.scriptDelayThread.interrupt ();
  this.scriptDelayThread = null;
  }if (this.fileLoadThread != null) {
  this.fileLoadThread.interrupt ();
  this.fileLoadThread.resumeEval ();
  if (this.thisContext != null) this.popContext (false, false);
  this.fileLoadThread = null;
  }});
  Clazz.defineMethod (c$, "getErrorLineMessage2",
  function () {
  return JS.ScriptError.getErrorLineMessage (this.functionName, this.scriptFileName, this.getLinenumber (null), this.pc, JS.ScriptEval.statementAsString (this.vwr, this.st, -9999, this.debugHigh));
  });
  Clazz.defineMethod (c$, "getLinenumber",
  function (c) {
  return (c == null ? this.lineNumbers[this.pc] : c.lineNumbers[c.pc]);
  }, "JS.ScriptContext");
  Clazz.defineMethod (c$, "dispatchCommands",
  function (isSpt, fromFunc, isTry) {
  if (this.sm == null) this.sm = this.vwr.shm;
  this.debugScript = this.debugHigh = false;
  if (!this.chk) this.setDebugging ();
  if (this.pcEnd == 0) this.pcEnd = 2147483647;
  if (this.lineEnd == 0) this.lineEnd = 2147483647;
  if (this.aatoken == null) return true;
  if (!this.tQuiet) {
  this.tQuiet = (this.vwr.getInt (536870922) < 0);
  }var allowJSInterrupt = (this.isJS && !fromFunc && this.useThreads () && this.vwr.getInt (536870922) >= 0);
  this.commandLoop (allowJSInterrupt);
  if (this.chk) return true;
  var script = this.vwr.getInsertedCommand ();
  if (!"".equals (script)) this.runScriptBuffer (script, null, false);
   else if (isSpt && this.debugScript && this.vwr.getBoolean (603979880)) this.vwr.getChimeMessenger ().update (null);
  if (!this.mustResumeEval && !allowJSInterrupt || fromFunc) return true;
  if (!isTry && this.mustResumeEval || this.thisContext == null) {
  var done = (this.thisContext == null);
  this.resumeEval (this.thisContext);
  this.mustResumeEval = false;
  return done;
  }return true;
  }, "~B,~B,~B");
  Clazz.defineMethod (c$, "commandLoop",
   function (allowJSInterrupt) {
  var lastCommand = "";
  var isForCheck = false;
  var vProcess = null;
  var lastTime = System.currentTimeMillis ();
  if (this.debugScript && this.debugHigh && !this.chk) {
  for (var i = this.pc; i < this.aatoken.length && i < this.pcEnd; i++) {
  JU.Logger.info ("Command " + i);
  if (this.debugScript) this.logDebugScript (this.aatoken[i], 0);
  }
  JU.Logger.info ("-----");
  }for (; this.pc < this.aatoken.length && this.pc < this.pcEnd; this.pc++) {
  if (allowJSInterrupt) {
  if (!this.executionPaused && System.currentTimeMillis () - lastTime > 1000) {
  this.pc--;
  this.doDelay (-1);
  }lastTime = System.currentTimeMillis ();
  }if (!this.chk && !this.checkContinue ()) break;
  if (this.pc >= this.lineNumbers.length || this.lineNumbers[this.pc] > this.lineEnd) break;
  if (this.debugHigh) {
  var timeBegin = 0;
  timeBegin = System.currentTimeMillis ();
  this.vwr.scriptStatus ("Eval.dispatchCommands():" + timeBegin);
  this.vwr.scriptStatus (this.script);
  }if (this.debugScript && !this.chk) JU.Logger.info ("Command " + this.pc + (this.thisContext == null ? "" : " path=" + this.thisContext.contextPath));
  this.theToken = (this.aatoken[this.pc].length == 0 ? null : this.aatoken[this.pc][0]);
  if (!this.historyDisabled && !this.chk && this.scriptLevel <= JS.ScriptEval.commandHistoryLevelMax && !this.tQuiet) {
  var cmdLine = this.getCommand (this.pc, true, true);
  if (this.theToken != null && cmdLine.length > 0 && !cmdLine.equals (lastCommand) && (this.theToken.tok == 134320141 || this.theToken.tok == 102436 || !JS.T.tokAttr (this.theToken.tok, 102400))) this.vwr.addCommand (lastCommand = cmdLine);
  }if (!this.chk && allowJSInterrupt) {
  var script = this.vwr.getInsertedCommand ();
  if (!"".equals (script)) this.runScript (script);
  }if (!this.setStatement (this.aatoken[this.pc], 1)) {
  JU.Logger.info (this.getCommand (this.pc, true, false) + " -- STATEMENT CONTAINING @{} SKIPPED");
  continue;
  }this.thisCommand = this.getCommand (this.pc, false, true);
  if (this.debugHigh || this.debugScript) JU.Logger.info (this.thisCommand);
  var nextCommand = this.getCommand (this.pc + 1, false, true);
  this.fullCommand = this.thisCommand + (nextCommand.startsWith ("#") ? nextCommand : "");
  this.getToken (0);
  this.iToken = 0;
  if ((this.listCommands || !this.chk && this.scriptLevel > 0) && !this.isJS) {
  var milliSecDelay = this.vwr.getInt (536870922);
  if (this.listCommands || milliSecDelay > 0) {
  if (milliSecDelay > 0) this.delayScript (-milliSecDelay);
  this.vwr.scriptEcho ("$[" + this.scriptLevel + "." + this.lineNumbers[this.pc] + "." + (this.pc + 1) + "] " + this.thisCommand);
  }}if (vProcess != null && (this.theTok != 102409 || this.slen < 2 || this.st[1].tok != 102439)) {
  vProcess.addLast (this.st);
  continue;
  }if (this.chk) {
  if (this.isCmdLine_c_or_C_Option) JU.Logger.info (this.thisCommand);
  if (this.slen == 1 && this.st[0].tok != 134320141 && this.st[0].tok != 102436) continue;
  } else {
  if (this.debugScript) this.logDebugScript (this.st, 0);
  if (this.scriptLevel == 0 && this.vwr.g.logCommands) this.vwr.log (this.thisCommand);
  if (this.debugHigh && this.theToken != null) JU.Logger.debug (this.theToken.toString ());
  }if (this.theToken == null) continue;
  var tok = this.theToken.tok;
  switch (tok) {
  case 36867:
  this.cmdSet ();
  continue;
  case 134320648:
  isForCheck = this.cmdFor (tok, isForCheck);
  continue;
  case 102439:
  this.pushContext (this.theToken, "PROCESS");
  if (this.parallelProcessor != null) vProcess =  new JU.Lst ();
  continue;
  default:
  if (JS.T.tokAttr (tok, 102400)) {
  isForCheck = this.cmdFlow (tok, isForCheck, vProcess);
  if (this.theTok == 102439) vProcess = null;
  continue;
  }this.processCommand (tok);
  this.setCursorWait (false);
  if (this.executionStepping) {
  this.executionPaused = (this.isCommandDisplayable (this.pc + 1));
  }}
  }
  }, "~B");
  Clazz.defineMethod (c$, "processCommand",
   function (tok) {
  if (JS.T.tokAttr (this.theToken.tok, 135168)) {
  this.processShapeCommand (tok);
  return;
  }switch (tok) {
  case 0:
  if (!this.chk && this.vwr.getBoolean (603979880)) this.vwr.getChimeMessenger ().showHash (this.outputBuffer, this.theToken.value);
  break;
  case 1275335685:
  this.pushContext (this.theToken, "PUSH");
  break;
  case 1275334681:
  this.popContext (true, false);
  break;
  case 268435490:
  break;
  case 4097:
  this.cmdAnimation ();
  break;
  case 1610616835:
  this.cmdBackground (1);
  break;
  case 4100:
  this.cmdBind ();
  break;
  case 4101:
  this.cmdBondorder ();
  break;
  case 20488:
  this.cmdCD ();
  break;
  case 12289:
  this.cmdCenter (1);
  break;
  case 1765808134:
  this.cmdColor ();
  break;
  case 12290:
  this.cmdDefine ();
  break;
  case 528397:
  this.cmdDelay ();
  break;
  case 12291:
  this.cmdDelete ();
  break;
  case 554176526:
  this.cmdSlab (true);
  break;
  case 1610625028:
  this.cmdDisplay (true);
  break;
  case 266255:
  case 266281:
  if (this.chk) break;
  if (this.pc > 0 && this.theToken.tok == 266255 && !this.vwr.autoExit) {
  this.vwr.clearScriptQueue ();
  }this.executionStopped = (this.pc > 0 || !this.vwr.g.useScriptQueue);
  break;
  case 266256:
  if (this.chk) return;
  if (this.outputBuffer != null) JU.Logger.warn (this.outputBuffer.toString ());
  this.vwr.exitJmol ();
  break;
  case 1228935687:
  this.cmdFile ();
  break;
  case 12293:
  this.cmdFixed ();
  break;
  case 4114:
  this.cmdFont (-1, 0);
  break;
  case 4115:
  case 1094717454:
  this.cmdModel (1);
  break;
  case 1073741824:
  this.cmdFunc ();
  break;
  case 1275072526:
  this.cmdGetProperty ();
  break;
  case 20500:
  if (this.vwr.headless) break;
  this.cmdGoto (true);
  break;
  case 20482:
  this.cmdHelp ();
  break;
  case 12294:
  this.cmdDisplay (false);
  break;
  case 1613238294:
  this.cmdHbond ();
  break;
  case 1610616855:
  this.cmdHistory (1);
  break;
  case 544771:
  this.cmdHover ();
  break;
  case 266265:
  if (!this.chk) this.vwr.initialize (!this.$isStateScript, false);
  break;
  case 134238732:
  this.cmdScript (134238732, null, null);
  break;
  case 134222849:
  this.cmdLoad ();
  break;
  case 36869:
  this.cmdLog ();
  break;
  case 528411:
  this.cmdLoop ();
  break;
  case 20485:
  this.cmdMessage ();
  break;
  case 4128:
  this.cmdMove ();
  break;
  case 4129:
  this.cmdMoveto ();
  break;
  case 20487:
  this.cmdPause ();
  break;
  case 36865:
  this.cmdPrint ();
  break;
  case 134256131:
  this.cmdPrompt ();
  break;
  case 4139:
  case 4165:
  this.cmdUndoRedoMove ();
  break;
  case 266284:
  this.refresh (true);
  break;
  case 4141:
  this.cmdReset ();
  break;
  case 12295:
  this.cmdRestrict ();
  break;
  case 4143:
  if (this.slen == 0) {
  if (!this.chk) this.resumePausedExecution ();
  break;
  }case 4142:
  this.cmdRestore ();
  break;
  case 36866:
  this.cmdReturn (null);
  break;
  case 528432:
  this.cmdRotate (false, false);
  break;
  case 4145:
  this.cmdRotate (false, true);
  break;
  case 4146:
  this.cmdSave ();
  break;
  case 134222850:
  this.cmdScript (134222850, null, null);
  break;
  case 1275082245:
  this.cmdSelect (1);
  break;
  case 1611141171:
  this.cmdSelectionHalos (1);
  break;
  case 554176565:
  this.cmdSlab (false);
  break;
  case 1611141175:
  this.cmdRotate (true, false);
  break;
  case 1611141176:
  this.cmdSsbond ();
  break;
  case 266298:
  if (this.cmdPause ()) this.stepPausedExecution ();
  break;
  case 1639976963:
  this.cmdStructure ();
  break;
  case 2109448:
  this.cmdSubset ();
  break;
  case 4156:
  this.cmdSync ();
  break;
  case 36870:
  this.cmdThrow ();
  break;
  case 536875070:
  this.cmdTimeout (1);
  break;
  case 4160:
  this.cmdTranslate (false);
  break;
  case 4162:
  this.cmdTranslate (true);
  break;
  case 4164:
  this.cmdUnbind ();
  break;
  case 36868:
  break;
  case 4166:
  this.cmdVibration ();
  break;
  case 12297:
  this.cmdZap (true);
  break;
  case 4168:
  this.cmdZoom (false);
  break;
  case 4170:
  this.cmdZoom (true);
  break;
  default:
  this.checkExtension (this.theToken.tok);
  }
  }, "~N");
  Clazz.defineMethod (c$, "checkExtension",
   function (tok) {
  switch (tok) {
  case 4098:
  case 134221829:
  case 4102:
  case 4103:
  case 4105:
  case 134221831:
  case 1094717448:
  case 4106:
  case 528395:
  case 1613238294:
  case 4120:
  case 4122:
  case 528443:
  case 4124:
  case 4125:
  case 4126:
  case 1275072532:
  case 4130:
  case 134221834:
  case 4131:
  case 4133:
  case 134221850:
  case 4138:
  case 134222350:
  case 134221856:
  this.getCmdExt ().dispatch (tok, false, this.st);
  break;
  default:
  System.out.println (JS.T.nameOf (tok) + " is not a command");
  this.error (47);
  }
  }, "~N");
  Clazz.defineMethod (c$, "processShapeCommand",
   function (tok) {
  var iShape = 0;
  switch (tok) {
  case 1611272194:
  iShape = 34;
  break;
  case 1114249217:
  iShape = 9;
  break;
  case 1678381065:
  iShape = 32;
  break;
  case 1112152066:
  iShape = 11;
  break;
  case 135174:
  iShape = 23;
  break;
  case 134353926:
  iShape = 25;
  break;
  case 135175:
  iShape = 17;
  break;
  case 1112150019:
  iShape = 16;
  break;
  case 135176:
  iShape = 22;
  break;
  case 537022465:
  iShape = 31;
  break;
  case 1112150020:
  iShape = 20;
  break;
  case 1611272202:
  iShape = 36;
  break;
  case 1112150021:
  iShape = 19;
  break;
  case 1112152070:
  iShape = 8;
  break;
  case 135180:
  iShape = 24;
  break;
  case 1825200146:
  iShape = 5;
  break;
  case 135182:
  iShape = 26;
  break;
  case 537006096:
  case 1745489939:
  iShape = 6;
  break;
  case 1112152071:
  iShape = 13;
  break;
  case 1073877010:
  iShape = 27;
  break;
  case 1073877011:
  iShape = 28;
  break;
  case 135190:
  iShape = 30;
  break;
  case 135188:
  iShape = 29;
  break;
  case 1275203608:
  iShape = 21;
  break;
  case 1112152073:
  iShape = 14;
  break;
  case 1112152074:
  iShape = 15;
  break;
  case 1112152075:
  iShape = 0;
  break;
  case 1112152076:
  iShape = 7;
  break;
  case 1649022989:
  iShape = 12;
  break;
  case 659482:
  iShape = 4;
  break;
  case 1112152078:
  iShape = 10;
  break;
  case 1814695966:
  iShape = 33;
  break;
  case 135198:
  iShape = 18;
  break;
  case 659488:
  iShape = 1;
  break;
  default:
  this.error (47);
  }
  if (this.sm.getShape (iShape) == null && this.slen == 2) {
  switch (this.st[1].tok) {
  case 1073742334:
  case 12291:
  case 1073742333:
  return;
  }
  }switch (tok) {
  case 1114249217:
  case 1112152066:
  case 1112152071:
  case 1112152073:
  case 1112152074:
  case 1649022989:
  case 1112152078:
  this.setSizeBio (iShape);
  return;
  case 1112150019:
  case 1112150021:
  this.cmdDots (iShape);
  return;
  case 1112152070:
  case 1112152075:
  case 1112152076:
  this.setSize (iShape, (tok == 1112152070 ? -1000.0 : 1));
  return;
  case 1825200146:
  this.cmdLabel (1, null);
  return;
  case 135198:
  this.cmdVector ();
  return;
  case 659488:
  this.cmdWireframe ();
  return;
  }
  switch (tok) {
  case 1611272194:
  this.cmdAxes (1);
  return;
  case 1678381065:
  this.cmdBoundbox (1);
  return;
  case 537022465:
  this.cmdEcho (1);
  return;
  case 1611272202:
  this.cmdFrank (1);
  return;
  case 1814695966:
  this.cmdUnitcell (1);
  return;
  case 1112150020:
  case 537006096:
  case 1745489939:
  case 1275203608:
  case 659482:
  this.getCmdExt ().dispatch (iShape, false, this.st);
  return;
  case 135174:
  case 134353926:
  case 135175:
  case 135176:
  case 135180:
  case 135182:
  case 1073877010:
  case 1073877011:
  case 135190:
  case 135188:
  this.getIsoExt ().dispatch (iShape, false, this.st);
  return;
  }
  }, "~N");
  Clazz.defineMethod (c$, "cmdAnimation",
   function () {
  var animate = false;
  switch (this.getToken (1).tok) {
  case 1073742335:
  animate = true;
  case 1073742334:
  if (!this.chk) this.vwr.setAnimationOn (animate);
  break;
  case 1073742029:
  var morphCount = Clazz.floatToInt (this.floatParameter (2));
  if (!this.chk) this.vwr.am.setMorphCount (Math.abs (morphCount));
  break;
  case 1610625028:
  this.iToken = 2;
  var bs = (this.tokAt (2) == 1073742327 ? null : this.atomExpressionAt (2));
  this.checkLength (this.iToken + 1);
  if (!this.chk) this.vwr.setAnimDisplay (bs);
  return;
  case 4115:
  if (this.isArrayParameter (2)) this.setFrameSet (2);
   else this.cmdModel (2);
  break;
  case 1073742024:
  var startDelay = 1;
  var endDelay = 1;
  if (this.slen > 5) this.bad ();
  var animationMode = JS.T.getTokFromName (this.paramAsStr (2));
  switch (animationMode) {
  case 1073742070:
  startDelay = endDelay = 0;
  break;
  case 528411:
  case 1073742082:
  break;
  default:
  this.invArg ();
  }
  if (this.slen >= 4) {
  startDelay = endDelay = this.floatParameter (3);
  if (this.slen == 5) endDelay = this.floatParameter (4);
  }if (!this.chk) this.vwr.am.setAnimationReplayMode (animationMode, startDelay, endDelay);
  break;
  case 1073741918:
  var i = 2;
  var direction = 0;
  switch (this.tokAt (i)) {
  case 268435616:
  direction = -this.intParameter (++i);
  break;
  case 268435617:
  direction = this.intParameter (++i);
  break;
  case 2:
  direction = this.intParameter (i);
  break;
  default:
  this.invArg ();
  }
  this.checkLength (++i);
  if (direction != 1 && direction != -1) this.errorStr2 (35, "-1", "1");
  if (!this.chk) this.vwr.am.setAnimationDirection (direction);
  break;
  case 1073741950:
  this.setIntProperty ("animationFps", this.intParameter (this.checkLast (2)));
  break;
  default:
  this.frameControl (1);
  }
  });
  Clazz.defineMethod (c$, "setFrameSet",
   function (i) {
  var frames = this.expandFloatArray (this.floatParameterSet (i, 0, 2147483647), 1);
  this.checkLength (this.iToken + 1);
  if (this.chk) return;
  var movie =  new java.util.Hashtable ();
  if (frames.length > 0) movie.put ("frames", frames);
  movie.put ("currentFrame", Integer.$valueOf (0));
  this.vwr.am.setMovie (movie);
  }, "~N");
  Clazz.defineMethod (c$, "cmdAxes",
   function (index) {
  var tickInfo = this.tickParamAsStr (index, true, true, false);
  index = this.iToken + 1;
  var tok = this.tokAt (index);
  var type = this.optParameterAsString (index).toLowerCase ();
  if (this.slen == index + 1 && JU.PT.isOneOf (type, ";window;unitcell;molecular;")) {
  this.setBooleanProperty ("axes" + type, true);
  return;
  }switch (tok) {
  case 1073742066:
  this.setFloatProperty ("axisOffset", this.floatParameter (++index));
  this.checkLast (this.iToken);
  return;
  case 12289:
  this.setShapeProperty (34, "origin", this.centerParameter (index + 1, null));
  this.checkLast (this.iToken);
  return;
  case 1140850696:
  var s = this.stringParameter (index + 1);
  if (!JU.PT.isOneOf (s, ";a;b;c;ab;ac;bc;abc;")) s = null;
  this.setShapeProperty (34, "type", s);
  this.checkLast (this.iToken);
  return;
  case 1073742138:
  this.setFloatProperty ("axesScale", this.floatParameter (this.checkLast (++index)));
  return;
  case 1825200146:
  switch (tok = this.tokAt (index + 1)) {
  case 1073742334:
  case 1073742335:
  this.checkLength (index + 2);
  this.setShapeProperty (34, "labels" + (tok == 1073742335 ? "On" : "Off"), null);
  return;
  }
  var sOrigin = null;
  switch (this.slen - index) {
  case 7:
  this.setShapeProperty (34, "labels",  Clazz.newArray (-1, [this.paramAsStr (++index), this.paramAsStr (++index), this.paramAsStr (++index), this.paramAsStr (++index), this.paramAsStr (++index), this.paramAsStr (++index)]));
  break;
  case 5:
  sOrigin = this.paramAsStr (index + 4);
  case 4:
  this.setShapeProperty (34, "labels",  Clazz.newArray (-1, [this.paramAsStr (++index), this.paramAsStr (++index), this.paramAsStr (++index), sOrigin]));
  break;
  default:
  this.bad ();
  }
  return;
  }
  if (type.equals ("position")) {
  var xyp;
  if (this.tokAt (++index) == 1073742334) {
  xyp =  new JU.P3 ();
  } else {
  xyp = this.xypParameter (index);
  if (xyp == null) this.invArg ();
  index = this.iToken;
  }this.setShapeProperty (34, "position", xyp);
  return;
  }var mad10 = this.getSetAxesTypeMad10 (index);
  if (this.chk || mad10 == 2147483647) return;
  this.setObjectMad10 (34, "axes", mad10);
  if (tickInfo != null) this.setShapeProperty (34, "tickInfo", tickInfo);
  }, "~N");
  Clazz.defineMethod (c$, "cmdBackground",
   function (i) {
  this.getToken (i);
  var argb;
  if (this.theTok == 4120) {
  var o = null;
  switch (this.tokAt (++i)) {
  case 15:
  case 6:
  o = this.getToken (i).value;
  break;
  default:
  var file = this.paramAsStr (this.checkLast (i));
  if (this.chk) return;
  if (file.equalsIgnoreCase ("none") || file.length == 0) {
  this.vwr.setBackgroundImage (null, null);
  return;
  }o = (file.startsWith (";base64,") ?  new JU.BArray (JU.Base64.decodeBase64 (file)) : file);
  }
  if (this.vwr.fm.loadImage (o, null, !this.useThreads ())) throw  new JS.ScriptInterruption (this, "backgroundImage", 1);
  return;
  }if (this.theTok == 1073742333 || this.isColorParam (i)) {
  argb = this.getArgbParamLast (i, true);
  if (this.chk) return;
  this.setObjectArgb ("background", argb);
  this.vwr.setBackgroundImage (null, null);
  return;
  }var iShape = this.getShapeType (this.theTok);
  this.colorShape (iShape, i + 1, true);
  }, "~N");
  Clazz.defineMethod (c$, "cmdBind",
   function () {
  var mouseAction = this.stringParameter (1);
  var name = this.paramAsStr (2);
  this.checkLength (3);
  if (!this.chk) this.vwr.bindAction (mouseAction, name);
  });
  Clazz.defineMethod (c$, "cmdBondorder",
   function () {
  this.checkLength (-3);
  var order = 0;
  switch (this.getToken (1).tok) {
  case 2:
  case 3:
  if ((order = JU.Edge.getBondOrderFromFloat (this.floatParameter (1))) == 131071) this.invArg ();
  break;
  default:
  if ((order = JS.ScriptParam.getBondOrderFromString (this.paramAsStr (1))) == 131071) this.invArg ();
  if (order == 33 && this.tokAt (2) == 3) {
  order = JS.ScriptParam.getPartialBondOrderFromFloatEncodedInt (this.st[2].intValue);
  }}
  this.setShapeProperty (1, "bondOrder", Integer.$valueOf (order));
  });
  Clazz.defineMethod (c$, "cmdBoundbox",
   function (index) {
  var tickInfo = this.tickParamAsStr (index, false, true, false);
  index = this.iToken + 1;
  var scale = 1;
  if (this.tokAt (index) == 1073742138) {
  scale = this.floatParameter (++index);
  if (!this.chk && scale == 0) this.invArg ();
  index++;
  if (index == this.slen) {
  if (!this.chk) this.vwr.ms.setBoundBox (null, null, true, scale);
  return;
  }}var byCorner = (this.tokAt (index) == 1073741902);
  if (byCorner) index++;
  if (this.isCenterParameter (index)) {
  var ret =  new Array (1);
  var index0 = index;
  var pt1 = this.centerParameter (index, ret);
  index = this.iToken + 1;
  if (byCorner || this.isCenterParameter (index)) {
  var pt2 = (byCorner ? this.centerParameter (index, ret) : this.getPoint3f (index, true));
  index = this.iToken + 1;
  if (!this.chk) this.vwr.ms.setBoundBox (pt1, pt2, byCorner, scale);
  } else if (ret[0] != null && Clazz.instanceOf (ret[0], JU.BS)) {
  if (!this.chk) this.vwr.calcBoundBoxDimensions (ret[0], scale);
  } else if (ret[0] == null && this.tokAt (index0) == 1073742330) {
  if (this.chk) return;
  var bbox = this.getObjectBoundingBox (this.objectNameParameter (++index0));
  if (bbox == null) this.invArg ();
  this.vwr.ms.setBoundBox (bbox[0], bbox[1], true, scale);
  index = this.iToken + 1;
  } else {
  this.invArg ();
  }if (index == this.slen) return;
  }var mad10 = this.getSetAxesTypeMad10 (index);
  if (this.chk || mad10 == 2147483647) return;
  if (tickInfo != null) this.setShapeProperty (32, "tickInfo", tickInfo);
  this.setObjectMad10 (32, "boundbox", mad10);
  }, "~N");
  Clazz.defineMethod (c$, "cmdCD",
   function () {
  if (this.chk) return;
  var dir = (this.slen == 1 ? null : this.paramAsStr (1));
  this.showString (this.vwr.cd (dir));
  });
  Clazz.defineMethod (c$, "cmdCenter",
   function (i) {
  if (this.slen == 1) {
  this.vwr.setNewRotationCenter (null);
  return;
  }var center = this.centerParameter (i, null);
  if (center == null) this.invArg ();
  if (!this.chk) this.vwr.setNewRotationCenter (center);
  }, "~N");
  Clazz.defineMethod (c$, "cmdColor",
   function () {
  var i = 1;
  var strColor = (this.tokAt (1) == 4 ? this.stringParameter (1) : null);
  if (this.isColorParam (1)) {
  this.theTok = 1140850689;
  } else {
  var argb = 0;
  i = 2;
  var tok = this.getToken (1).tok;
  if (tok == 4) {
  tok = JS.T.getTokFromName (strColor);
  if (tok == 0) tok = 4;
  }switch (tok) {
  case 1073742330:
  this.setObjectProperty ();
  return;
  case 1086324739:
  case 2097154:
  case 2097166:
  case 1086326788:
  case 1073741946:
  case 1631586315:
  case 1086324742:
  case 1113589786:
  case 1086324746:
  case 1073741991:
  case 1094713360:
  case 1094713361:
  case 1073742333:
  case 1073742074:
  case 1111492619:
  case 1094713362:
  case 1715472409:
  case 1073742116:
  case 1073742110:
  case 1112152075:
  case 1073742144:
  case 1111490574:
  case 1639976963:
  case 1111490575:
  case 1111492620:
  case 603979967:
  case 1073742186:
  case 1648363544:
  this.theTok = 1140850689;
  i = 1;
  break;
  case 4:
  i = 2;
  if (this.isArrayParameter (i)) {
  strColor = strColor += "=" + JS.SV.sValue (JS.SV.getVariableAS (this.stringParameterSet (i))).$replace ('\n', ' ');
  i = this.iToken + 1;
  }var isTranslucent = (this.tokAt (i) == 603979967);
  if (!this.chk) this.vwr.setPropertyColorScheme (strColor, isTranslucent, true);
  if (isTranslucent) ++i;
  if (this.tokAt (i) == 1073742114 || this.tokAt (i) == 1073741826) {
  var min = this.floatParameter (++i);
  var max = this.floatParameter (++i);
  if (!this.chk) this.vwr.cm.setPropertyColorRange (min, max);
  }return;
  case 1073742114:
  case 1073741826:
  var min = this.floatParameter (2);
  var max = this.floatParameter (this.checkLast (3));
  if (!this.chk) this.vwr.cm.setPropertyColorRange (min, max);
  return;
  case 1610616835:
  argb = this.getArgbParamLast (2, true);
  if (!this.chk) this.setObjectArgb ("background", argb);
  return;
  case 12290:
  case 10:
  case 1073742325:
  i = -1;
  this.theTok = 1140850689;
  break;
  case 1073742134:
  argb = this.getArgbParamLast (2, false);
  if (!this.chk) this.vwr.cm.setRubberbandArgb (argb);
  return;
  case 536870920:
  case 1611141171:
  i = 2;
  if (this.tokAt (2) == 1073742074) i++;
  argb = this.getArgbParamLast (i, true);
  if (this.chk) return;
  this.sm.loadShape (8);
  this.setShapeProperty (8, (tok == 1611141171 ? "argbSelection" : "argbHighlight"), Integer.$valueOf (argb));
  return;
  case 1611272194:
  case 1678381065:
  case 1814695966:
  case 1073741824:
  case 1612709900:
  var str = this.paramAsStr (1);
  if (this.checkToken (2)) {
  argb = this.getToken (2).tok;
  switch (argb) {
  case 1073742333:
  argb = 1073741991;
  break;
  case 1073741991:
  case 1073742116:
  case 1073742110:
  break;
  default:
  argb = this.getArgbParam (2);
  }
  }if (argb == 0) this.error (9);
  this.checkLast (this.iToken);
  if (str.equalsIgnoreCase ("axes") || JV.StateManager.getObjectIdFromName (str) >= 0) {
  this.setObjectArgb (str, argb);
  return;
  }if (this.setElementColor (str, argb)) return;
  this.invArg ();
  break;
  case 135180:
  case 134353926:
  this.setShapeProperty (JV.JC.shapeTokenIndex (tok), "thisID", "+PREVIOUS_MESH+");
  break;
  }
  }this.colorShape (this.getShapeType (this.theTok), i, false);
  });
  Clazz.defineMethod (c$, "cmdDefine",
   function () {
  if (this.slen < 3 || !(Clazz.instanceOf (this.getToken (1).value, String))) this.invArg ();
  var setName = (this.getToken (1).value).toLowerCase ();
  if (JU.PT.parseInt (setName) != -2147483648) this.invArg ();
  if (this.chk) return;
  var isSite = setName.startsWith ("site_");
  var isDynamic = (setName.indexOf ("dynamic_") == 0);
  if (isDynamic || isSite) {
  var code =  new Array (this.slen);
  for (var i = this.slen; --i >= 0; ) code[i] = this.st[i];
  
  this.vwr.definedAtomSets.put ("!" + (isSite ? setName : setName.substring (8)), code);
  } else {
  var bs = this.atomExpressionAt (2);
  this.vwr.definedAtomSets.put (setName, bs);
  if (!this.chk) this.vwr.g.setUserVariable ("@" + setName, JS.SV.newV (10, bs));
  }});
  Clazz.defineMethod (c$, "cmdDelay",
   function () {
  var millis = 0;
  switch (this.getToken (1).tok) {
  case 1073742335:
  millis = 1;
  break;
  case 2:
  millis = this.intParameter (1) * 1000;
  break;
  case 3:
  millis = Clazz.floatToInt (this.floatParameter (1) * 1000);
  break;
  default:
  this.error (34);
  }
  this.refresh (false);
  this.doDelay (Math.abs (millis));
  });
  Clazz.defineMethod (c$, "cmdDelete",
   function () {
  if (this.tokAt (1) == 1073742330) {
  if (this.slen == 4 && this.optParameterAsString (2).equals ("saved") && this.slen == 4) {
  this.vwr.stm.deleteSaved (this.optParameterAsString (3));
  if (this.doReport ()) this.report (J.i18n.GT.o (J.i18n.GT._ ("show saved: {0}"), this.vwr.stm.listSavedStates ()), false);
  return;
  }this.setObjectProperty ();
  return;
  }var bs = (this.slen == 1 ? null : this.atomExpression (this.st, 1, 0, true, false, null, false));
  if (this.chk) return;
  if (bs == null) bs = this.vwr.getAllAtoms ();
  var nDeleted = this.vwr.deleteAtoms (bs, false);
  if (this.doReport ()) this.report (J.i18n.GT.i (J.i18n.GT._ ("{0} atoms deleted"), nDeleted), false);
  });
  Clazz.defineMethod (c$, "cmdDisplay",
   function (isDisplay) {
  var bs = null;
  var addRemove = 0;
  var i = 1;
  var tok;
  switch (tok = this.tokAt (1)) {
  case 1275069441:
  case 1073742119:
  addRemove = tok;
  tok = this.tokAt (++i);
  break;
  }
  var isGroup = (tok == 1086324742);
  if (isGroup) tok = this.tokAt (++i);
  switch (tok) {
  case 1073742330:
  this.setObjectProperty ();
  return;
  case 0:
  break;
  default:
  if (this.slen == 4 && this.tokAt (2) == 1677721602) bs = JM.BondSet.newBS (JU.BSUtil.newBitSet2 (0, this.vwr.ms.bondCount), null);
   else bs = this.atomExpressionAt (i);
  }
  if (this.chk) return;
  if (Clazz.instanceOf (bs, JM.BondSet)) {
  this.vwr.ms.displayBonds (bs, isDisplay);
  return;
  }this.vwr.displayAtoms (bs, isDisplay, isGroup, addRemove, this.tQuiet);
  }, "~B");
  Clazz.defineMethod (c$, "cmdDots",
   function (iShape) {
  if (!this.chk) this.sm.loadShape (iShape);
  this.setShapeProperty (iShape, "init", null);
  var value = NaN;
  var type = J.atomdata.RadiusData.EnumType.ABSOLUTE;
  var ipt = 1;
  while (true) {
  switch (this.getToken (ipt).tok) {
  case 1073742072:
  this.restrictSelected (false, false);
  case 1073742335:
  value = 1;
  type = J.atomdata.RadiusData.EnumType.FACTOR;
  break;
  case 1073742334:
  value = 0;
  break;
  case 1073741976:
  this.setShapeProperty (iShape, "ignore", this.atomExpressionAt (ipt + 1));
  ipt = this.iToken + 1;
  continue;
  case 2:
  var dotsParam = this.intParameter (ipt);
  if (this.tokAt (ipt + 1) == 1665140738) {
  ipt++;
  this.setShapeProperty (iShape, "atom", Integer.$valueOf (dotsParam));
  this.setShapeProperty (iShape, "radius", Float.$valueOf (this.floatParameter (++ipt)));
  if (this.tokAt (++ipt) == 1765808134) {
  this.setShapeProperty (iShape, "colorRGB", Integer.$valueOf (this.getArgbParam (++ipt)));
  ipt++;
  }if (this.getToken (ipt).tok != 10) this.invArg ();
  this.setShapeProperty (iShape, "dots", this.st[ipt].value);
  return;
  }break;
  }
  break;
  }
  var rd = (Float.isNaN (value) ? this.encodeRadiusParameter (ipt, false, true) :  new J.atomdata.RadiusData (null, value, type, J.c.VDW.AUTO));
  if (rd == null) return;
  if (Float.isNaN (rd.value)) this.invArg ();
  this.setShapeSize (iShape, rd);
  }, "~N");
  Clazz.defineMethod (c$, "cmdEcho",
   function (index) {
  if (this.chk) return;
  var text = this.optParameterAsString (index);
  var doRefresh = true;
  if (this.vwr.ms.getEchoStateActive ()) {
  if (text.startsWith ("\1")) {
  text = text.substring (1);
  doRefresh = false;
  }if (text != null) this.setShapeProperty (31, "text", text);
  }if (doRefresh && this.vwr.getRefreshing ()) this.showString (JU.Txt.formatText (this.vwr, text));
  }, "~N");
  Clazz.defineMethod (c$, "cmdFile",
   function () {
  var file = this.intParameter (this.checkLast (1));
  if (this.chk) return;
  var modelIndex = this.vwr.ms.getModelNumberIndex (file * 1000000 + 1, false, false);
  var modelIndex2 = -1;
  if (modelIndex >= 0) {
  modelIndex2 = this.vwr.ms.getModelNumberIndex ((file + 1) * 1000000 + 1, false, false);
  if (modelIndex2 < 0) modelIndex2 = this.vwr.ms.mc;
  modelIndex2--;
  }this.vwr.setAnimationOn (false);
  this.vwr.am.setAnimationDirection (1);
  this.vwr.setAnimationRange (modelIndex, modelIndex2);
  this.vwr.setCurrentModelIndex (-1);
  });
  Clazz.defineMethod (c$, "cmdFixed",
   function () {
  var bs = (this.slen == 1 ? null : this.atomExpressionAt (1));
  if (this.chk) return;
  this.vwr.setMotionFixedAtoms (bs);
  });
  Clazz.defineMethod (c$, "cmdFor",
   function (tok, isForCheck) {
  var cmdToken = this.theToken;
  var pt = this.st[0].intValue;
  var forVars = cmdToken.forVars;
  var pts =  Clazz.newIntArray (2, 0);
  var bsOrList = null;
  var forVal = null;
  var forVar = null;
  var inTok = 0;
  var isOK = true;
  var isMinusMinus = false;
  var j = 0;
  var key = null;
  if (isForCheck && forVars != null) {
  tok = 1275068432;
  forVar = forVars[0];
  forVal = forVars[1];
  bsOrList = forVars[1].value;
  j = ++forVal.intValue;
  if (forVal.tok == 2) {
  isMinusMinus = (j < 0);
  var i1 = (bsOrList)[0];
  var i2 = (bsOrList)[1];
  isOK = (i1 != i2 && (i2 < i1) == isMinusMinus);
  if (isOK) forVar.intValue = (bsOrList)[0] = i1 + (isMinusMinus ? -1 : 1);
  j = -1;
  } else if (forVal.tok == 7) {
  isOK = (j <= (bsOrList).size ());
  if (isOK) forVar.setv (JS.SV.selectItemVar (forVal));
  j = -1;
  } else {
  this.isBondSet = Clazz.instanceOf (bsOrList, JM.BondSet);
  j = (bsOrList).nextSetBit (j);
  isOK = (j >= 0);
  }} else {
  var isLocal = false;
  for (var i = 1, nSkip = 0; i < this.slen && j < 2; i++) {
  switch (tok = this.tokAt (i)) {
  case 36868:
  isLocal = true;
  break;
  case 1073742339:
  if (nSkip > 0) nSkip--;
   else pts[j++] = i;
  break;
  case 1275068432:
  case 1073741952:
  key = this.paramAsStr (i - 1);
  nSkip -= 2;
  if (this.isAtomExpression (++i)) {
  inTok = 10;
  bsOrList = this.atomExpressionAt (i);
  if (this.isBondSet) bsOrList = JM.BondSet.newBS (bsOrList, null);
  isOK = ((bsOrList).nextSetBit (0) >= 0);
  } else {
  var what = this.parameterExpressionList (-i, 1, false);
  if (what == null || what.size () < 1) this.invArg ();
  var vl = what.get (0);
  switch (inTok = vl.tok) {
  case 10:
  bsOrList = vl.value;
  isOK = !(bsOrList).isEmpty ();
  break;
  case 7:
  var v = vl.getList ();
  j = v.size ();
  isOK = (j > 0);
  if (isOK && tok == 1073741952) {
  var i12 =  Clazz.newIntArray (-1, [JS.SV.iValue (v.get (0)), JS.SV.iValue (v.get (j - 1))]);
  isMinusMinus = (i12[1] < i12[0]);
  bsOrList = i12;
  tok = 1275068432;
  inTok = 2;
  } else {
  bsOrList = v;
  }break;
  case 6:
  var m = vl.getMap ();
  var n = m.keySet ().size ();
  isOK = (n > 0);
  if (isOK) {
  var keys =  new Array (n);
  m.keySet ().toArray (keys);
  java.util.Arrays.sort (keys);
  bsOrList = keys;
  }break;
  default:
  this.invArg ();
  }
  }i = this.iToken;
  break;
  case 1275082245:
  nSkip += 2;
  break;
  }
  }
  if (!isForCheck) {
  this.pushContext (cmdToken, "FOR");
  this.thisContext.forVars = forVars;
  forVars = null;
  }if (key == null) {
  if (isForCheck) {
  j = (bsOrList == null ? pts[1] + 1 : 2);
  } else {
  j = 2;
  }if (this.tokAt (j) == 36868) j++;
  key = this.paramAsStr (j);
  isMinusMinus = key.equals ("--") || key.equals ("++");
  if (isMinusMinus) key = this.paramAsStr (++j);
  }if (isOK) if (tok == 1275068432) {
  forVar = this.getContextVariableAsVariable (key, isLocal);
  if (forVar == null && !isLocal) forVar = this.vwr.g.getAndSetNewVariable (key, false);
  if (forVar == null || forVar.myName == null) {
  if (key.startsWith ("_")) this.invArg ();
  if (isLocal) this.contextVariables.put (key.toLowerCase (), forVar = JS.SV.newI (0));
   else forVar = this.vwr.g.getAndSetNewVariable (key, true);
  }if (inTok == 2) {
  forVar.tok = 2;
  forVar.intValue = (bsOrList)[0];
  forVal = JS.SV.newV (2, bsOrList);
  forVal.intValue = (isMinusMinus ? -2147483648 : 0);
  j = -1;
  } else {
  forVal = JS.SV.getVariable (bsOrList);
  if (inTok == 10) {
  j = (bsOrList).nextSetBit (0);
  forVal.intValue = 0;
  } else {
  forVal.intValue = 1;
  forVar.setv (JS.SV.selectItemVar (forVal));
  j = -1;
  }}if (forVars == null) forVars = cmdToken.forVars =  new Array (2);
  forVars[0] = forVar;
  forVars[1] = forVal;
  } else {
  var vtok = this.tokAt (j);
  if (vtok != 1073742339 && (JS.T.tokAttr (vtok, 1073741824) || (forVal = this.getContextVariableAsVariable (key, false)) != null)) {
  if (!isMinusMinus && this.getToken (++j).tok != 268435860) this.invArg ();
  if (isMinusMinus) j -= 2;
  this.setVariable (++j, this.slen - 1, key, false);
  }isOK = (pts[0] + 1 == pts[1] || this.parameterExpressionBoolean (pts[0] + 1, pts[1]));
  }}if (isOK && tok == 1275068432 && j >= 0) {
  forVal.intValue = j;
  forVar.tok = 10;
  if (this.isBondSet) {
  forVar.value =  new JM.BondSet ();
  (forVar.value).set (j);
  } else {
  forVar.value = JU.BSUtil.newAndSetBit (j);
  }}pt++;
  if (!isOK) {
  cmdToken.forVars = this.thisContext.forVars;
  this.popContext (true, false);
  }isForCheck = false;
  if (!isOK && !this.chk) this.pc = Math.abs (pt) - 1;
  return isForCheck;
  }, "~N,~B");
  Clazz.defineMethod (c$, "cmdFlow",
   function (tok, isForCheck, vProcess) {
  var ct;
  var pt = this.st[0].intValue;
  var isDone = (pt < 0 && !this.chk);
  var continuing = true;
  var ptNext = 0;
  switch (tok) {
  case 134320141:
  case 102436:
  this.cmdFunc ();
  return isForCheck;
  case 364558:
  return isForCheck;
  case 102412:
  ct = this.theToken;
  this.pushContext (ct, "CATCH");
  if (!isDone && ct.name0 != null) this.contextVariables.put (ct.name0, ct.contextVariables.get (ct.name0));
  continuing = !isDone;
  this.st[0].intValue = -Math.abs (pt);
  break;
  case 102410:
  case 102413:
  case 102411:
  ptNext = Math.abs (this.aatoken[Math.abs (pt)][0].intValue);
  switch (isDone ? 0 : this.cmdFlowSwitch (this.theToken, tok)) {
  case 0:
  ptNext = -ptNext;
  continuing = false;
  break;
  case -1:
  continuing = false;
  break;
  case 1:
  }
  this.aatoken[this.pc][0].intValue = Math.abs (pt);
  this.theToken = this.aatoken[Math.abs (pt)][0];
  if (this.theToken.tok != 102409) this.theToken.intValue = ptNext;
  break;
  case 134320649:
  case 102402:
  continuing = (!isDone && this.parameterExpressionBoolean (1, 0));
  if (this.chk) break;
  ptNext = Math.abs (this.aatoken[Math.abs (pt)][0].intValue);
  ptNext = (isDone || continuing ? -ptNext : ptNext);
  this.aatoken[Math.abs (pt)][0].intValue = ptNext;
  if (tok == 102412) this.aatoken[this.pc][0].intValue = -pt;
  break;
  case 364547:
  this.checkLength (1);
  if (pt < 0 && !this.chk) this.pc = -pt - 1;
  break;
  case 364548:
  this.checkLength (1);
  break;
  case 102406:
  if (!isForCheck) this.pushContext (this.theToken, "WHILE");
  isForCheck = false;
  if (!this.parameterExpressionBoolean (1, 0) && !this.chk) {
  this.pc = pt;
  this.popContext (true, false);
  }break;
  case 102407:
  if (!this.chk) {
  this.breakAt (pt);
  break;
  }if (this.slen == 1) break;
  var n = this.intParameter (this.checkLast (1));
  if (this.chk) break;
  for (var i = 0; i < n; i++) this.popContext (true, false);
  
  break;
  case 102408:
  isForCheck = true;
  if (!this.chk) this.pc = pt - 1;
  if (this.slen > 1) this.intParameter (this.checkLast (1));
  break;
  case 102409:
  switch (this.getToken (this.checkLast (1)).tok) {
  case 364558:
  var trycmd = this.getToken (1).value;
  if (this.chk) return false;
  this.runFunctionAndRet (trycmd, "try", null, null, true, true, true);
  return false;
  case 134320141:
  case 102436:
  this.vwr.addFunction (this.theToken.value);
  return isForCheck;
  case 102412:
  this.popContext (true, false);
  break;
  case 102439:
  this.addProcess (vProcess, pt, this.pc);
  this.popContext (true, false);
  break;
  case 102410:
  if (pt > 0 && this.cmdFlowSwitch (this.aatoken[pt][0], 0) == -1) {
  for (; pt < this.pc; pt++) if ((tok = this.aatoken[pt][0].tok) != 102413 && tok != 102411) break;
  
  continuing = (this.pc == pt);
  }break;
  case 134320649:
  break;
  case 134320648:
  case 102406:
  continuing = false;
  isForCheck = true;
  break;
  }
  break;
  }
  if (!continuing && !this.chk) this.pc = Math.abs (pt) - 1;
  return isForCheck;
  }, "~N,~B,JU.Lst");
  Clazz.defineMethod (c$, "cmdFlowSwitch",
   function (c, tok) {
  if (tok == 102410) c.addName ("_var");
  var $var = c.contextVariables.get ("_var");
  if ($var == null) return 1;
  if (tok == 0) {
  c.contextVariables.remove ("_var");
  return -1;
  }if (tok == 102413) return -1;
  var v = this.parameterExpressionToken (1);
  if (tok == 102411) {
  var isOK = JS.SV.areEqual ($var, v);
  if (isOK) c.contextVariables.remove ("_var");
  return isOK ? 1 : -1;
  }c.contextVariables.put ("_var", v);
  return 1;
  }, "JS.ContextToken,~N");
  Clazz.defineMethod (c$, "cmdFont",
   function (shapeType, fontsize) {
  var fontface = "SansSerif";
  var fontstyle = "Plain";
  var sizeAdjust = 0;
  var scaleAngstromsPerPixel = -1;
  switch (this.iToken = this.slen) {
  case 6:
  scaleAngstromsPerPixel = this.floatParameter (5);
  if (scaleAngstromsPerPixel >= 5) scaleAngstromsPerPixel = this.vwr.tm.getZoomSetting () / scaleAngstromsPerPixel / this.vwr.getScalePixelsPerAngstrom (false);
  case 5:
  if (this.getToken (4).tok != 1073741824) this.invArg ();
  fontstyle = this.paramAsStr (4);
  case 4:
  if (this.getToken (3).tok != 1073741824) this.invArg ();
  fontface = this.paramAsStr (3);
  if (!this.isFloatParameter (2)) this.error (34);
  fontsize = this.floatParameter (2);
  shapeType = this.getShapeType (this.getToken (1).tok);
  break;
  case 3:
  if (!this.isFloatParameter (2)) this.error (34);
  if (shapeType == -1) {
  shapeType = this.getShapeType (this.getToken (1).tok);
  fontsize = this.floatParameter (2);
  } else {
  if (fontsize >= 1) fontsize += (sizeAdjust = 5);
  }break;
  case 2:
  default:
  if (shapeType == 5) {
  fontsize = 13;
  break;
  }this.bad ();
  }
  if (shapeType == 5) {
  if (fontsize < 0 || fontsize >= 1 && (fontsize < 6 || fontsize > 63)) {
  this.integerOutOfRange (6 - sizeAdjust, 63 - sizeAdjust);
  return;
  }this.setShapeProperty (5, "setDefaults", this.vwr.slm.noneSelected);
  }if (this.chk) return;
  if (javajs.awt.Font.getFontStyleID (fontface) >= 0) {
  fontstyle = fontface;
  fontface = "SansSerif";
  }var font3d = this.vwr.getFont3D (fontface, fontstyle, fontsize);
  this.sm.loadShape (shapeType);
  this.setShapeProperty (shapeType, "font", font3d);
  if (scaleAngstromsPerPixel >= 0) this.setShapeProperty (shapeType, "scalereference", Float.$valueOf (scaleAngstromsPerPixel));
  }, "~N,~N");
  Clazz.defineMethod (c$, "cmdFrank",
   function (i) {
  var b = true;
  if (this.slen > i) switch (this.getToken (this.checkLast (i)).tok) {
  case 1073742335:
  break;
  case 1073742334:
  b = false;
  break;
  default:
  this.error (5);
  }
  this.setBooleanProperty ("frank", b);
  }, "~N");
  Clazz.defineMethod (c$, "cmdFunc",
   function () {
  if (this.chk && !this.isCmdLine_c_or_C_Option) return;
  var name = (this.getToken (0).value).toLowerCase ();
  if (!this.vwr.isFunction (name)) this.error (10);
  var params = (this.slen == 1 || this.slen == 3 && this.tokAt (1) == 268435472 && this.tokAt (2) == 268435473 ? null : this.parameterExpressionList (1, -1, false));
  if (this.chk) return;
  this.runFunctionAndRet (null, name, params, null, false, true, true);
  });
  Clazz.defineMethod (c$, "cmdGetProperty",
   function () {
  if (this.chk) return;
  var retValue = "";
  var property = this.optParameterAsString (1);
  var name = property;
  if (name.indexOf (".") >= 0) name = name.substring (0, name.indexOf ("."));
  if (name.indexOf ("[") >= 0) name = name.substring (0, name.indexOf ("["));
  var propertyID = this.vwr.getPropertyNumber (name);
  var param = "";
  switch (this.tokAt (2)) {
  default:
  param = this.optParameterAsString (2);
  break;
  case 12290:
  case 1073742325:
  case 10:
  param = this.atomExpressionAt (2);
  if (property.equalsIgnoreCase ("bondInfo") && this.isAtomExpression (++this.iToken)) param =  Clazz.newArray (-1, [param, this.atomExpressionAt (this.iToken)]);
  break;
  }
  if (property.length > 0 && propertyID < 0) {
  property = "";
  param = "";
  } else if (propertyID >= 0 && this.slen < 3) {
  if ((param = this.vwr.getDefaultPropertyParam (propertyID)).equals ("(visible)")) param = this.vwr.ms.getVisibleSet (true);
  } else if (propertyID == this.vwr.getPropertyNumber ("fileContents")) {
  var s = param.toString ();
  for (var i = 3; i < this.slen; i++) s += this.paramAsStr (i);
  
  param = s;
  }retValue = this.vwr.getProperty ("readable", property, param);
  this.showString (retValue);
  });
  Clazz.defineMethod (c$, "cmdGoto",
   function (isCmd) {
  var strTo = (isCmd ? this.paramAsStr (this.checkLast (1)) : null);
  var pcTo = (strTo == null ? this.aatoken.length - 1 : -1);
  var s = null;
  for (var i = pcTo + 1; i < this.aatoken.length; i++) {
  var tokens = this.aatoken[i];
  var tok = tokens[0].tok;
  switch (tok) {
  case 20485:
  case 0:
  s = tokens[tokens.length - 1].value;
  if (tok == 0) s = s.substring (s.startsWith ("#") ? 1 : 2);
  break;
  default:
  continue;
  }
  if (s.equalsIgnoreCase (strTo)) {
  pcTo = i;
  break;
  }}
  if (pcTo < 0) this.invArg ();
  if (strTo == null) pcTo = 0;
  var di = (pcTo < this.pc ? 1 : -1);
  var nPush = 0;
  for (var i = pcTo; i != this.pc; i += di) {
  switch (this.aatoken[i][0].tok) {
  case 1275335685:
  case 102439:
  case 134320648:
  case 102412:
  case 102406:
  nPush++;
  break;
  case 1275334681:
  nPush--;
  break;
  case 102409:
  switch (this.aatoken[i][1].tok) {
  case 102439:
  case 134320648:
  case 102412:
  case 102406:
  nPush--;
  }
  break;
  }
  }
  if (strTo == null) {
  pcTo = 2147483647;
  for (; nPush > 0; --nPush) this.popContext (false, false);
  
  }if (nPush != 0) this.invArg ();
  if (!this.chk) this.pc = pcTo - 1;
  }, "~B");
  Clazz.defineMethod (c$, "cmdHbond",
   function () {
  if (this.slen == 2 && this.getToken (1).tok == 4102) {
  if (this.chk) return;
  var n = this.vwr.autoHbond (null, null, false);
  this.report (J.i18n.GT.i (J.i18n.GT._ ("{0} hydrogen bonds"), Math.abs (n)), false);
  return;
  }if (this.slen == 2 && this.getToken (1).tok == 12291) {
  if (this.chk) return;
  this.checkExtension (1613238294);
  return;
  }var mad = this.getMadParameter ();
  if (mad == 2147483647) return;
  this.setShapeProperty (1, "type", Integer.$valueOf (30720));
  this.setShapeSizeBs (1, mad, null);
  this.setShapeProperty (1, "type", Integer.$valueOf (1023));
  });
  Clazz.defineMethod (c$, "cmdHelp",
   function () {
  if (this.chk) return;
  var what = this.optParameterAsString (1).toLowerCase ();
  var pt = 0;
  if (what.startsWith ("mouse") && (pt = what.indexOf (" ")) >= 0 && pt == what.lastIndexOf (" ")) {
  this.showString (this.vwr.getBindingInfo (what.substring (pt + 1)));
  return;
  }if (JS.T.tokAttr (JS.T.getTokFromName (what), 4096)) what = "?command=" + what;
  this.vwr.getHelp (what);
  });
  Clazz.defineMethod (c$, "cmdHistory",
   function (pt) {
  if (this.slen == 1) {
  this.showString (this.vwr.getSetHistory (2147483647));
  return;
  }if (pt == 2) {
  var n = this.intParameter (this.checkLast (2));
  if (n < 0) this.invArg ();
  if (!this.chk) this.vwr.getSetHistory (n == 0 ? 0 : -2 - n);
  return;
  }switch (this.getToken (this.checkLast (1)).tok) {
  case 1073742335:
  case 1073741882:
  if (!this.chk) this.vwr.getSetHistory (-2147483648);
  return;
  case 1073742334:
  if (!this.chk) this.vwr.getSetHistory (0);
  break;
  default:
  this.errorStr (24, "ON, OFF, CLEAR");
  }
  }, "~N");
  Clazz.defineMethod (c$, "cmdHover",
   function () {
  if (this.chk) return;
  var strLabel = (this.slen == 1 ? "on" : this.paramAsStr (1));
  if (strLabel.equalsIgnoreCase ("on")) strLabel = "%U";
   else if (strLabel.equalsIgnoreCase ("off")) strLabel = null;
  this.vwr.setHoverLabel (strLabel);
  });
  Clazz.defineMethod (c$, "cmdLabel",
   function (index, bs) {
  if (this.chk) return;
  this.sm.loadShape (5);
  var strLabel = null;
  switch (this.getToken (index).tok) {
  case 1073742335:
  strLabel = this.vwr.getStandardLabelFormat (0);
  break;
  case 1073742334:
  break;
  case 12294:
  case 1610625028:
  this.setShapeProperty (5, "display", this.theTok == 1610625028 ? Boolean.TRUE : Boolean.FALSE);
  return;
  case 7:
  strLabel = this.theToken.value;
  break;
  default:
  strLabel = this.paramAsStr (index);
  }
  this.sm.setLabel (strLabel, bs == null ? this.vwr.bsA () : bs);
  }, "~N,JU.BS");
  Clazz.defineMethod (c$, "cmdLoad",
  function () {
  var doLoadFiles = (!this.chk || this.isCmdLine_C_Option);
  var isAppend = false;
  var isInline = false;
  var isSmiles = false;
  var isMutate = false;
  var isData = false;
  var isAsync = this.vwr.async;
  var isConcat = false;
  var doOrient = false;
  var appendNew = this.vwr.getBoolean (603979792);
  var isAudio = false;
  var filename = null;
  var bsModels;
  var i = (this.tokAt (0) == 134221834 ? 0 : 1);
  var filter = null;
  var modelCount0 = this.vwr.ms.mc - (this.vwr.fm.getFileName ().equals ("zapped") ? 1 : 0);
  var ac0 = this.vwr.ms.ac;
  var loadScript =  new JU.SB ().append ("load");
  var nFiles = 1;
  var htParams =  new java.util.Hashtable ();
  if (this.$isStateScript) {
  htParams.put ("isStateScript", Boolean.TRUE);
  if (this.forceNoAddHydrogens) htParams.put ("doNotAddHydrogens", Boolean.TRUE);
  }var modelName = null;
  var filenames = null;
  var tempFileInfo = null;
  var errMsg = null;
  var sOptions =  new JU.SB ();
  var tokType = 0;
  var tok;
  if (this.slen == 1) {
  i = 0;
  } else {
  modelName = this.paramAsStr (i);
  if (this.slen == 2 && !this.chk) {
  if (modelName.endsWith (".spt") || modelName.endsWith (".png") || modelName.endsWith (".pngj")) {
  this.cmdScript (0, modelName, null);
  return;
  }}tok = this.tokAt (i);
  switch (tok) {
  case 36868:
  var $var = this.paramAsStr (++i);
  filename = "@" + $var;
  var o = this.getVarParameter ($var, false);
  if (Clazz.instanceOf (o, java.util.Map)) {
  this.checkLength (3);
  this.loadPNGJVar (filename, o, htParams);
  return;
  }break;
  case 1073877011:
  case 1610616855:
  case 1073742015:
  var m = this.paramAsStr (this.checkLast (2));
  if (!this.chk) {
  switch (tok) {
  case 1073877011:
  htParams.put ("service", "nbo");
  htParams.put ("mode", Integer.$valueOf (1));
  htParams.put ("action", "load");
  htParams.put ("value", m);
  htParams.put ("sync", Boolean.TRUE);
  this.vwr.sm.processService (htParams);
  this.runScript (htParams.get ("ret"));
  break;
  case 1610616855:
  this.vwr.setHistory (m);
  break;
  case 1073742015:
  this.vwr.setMenu (m, true);
  break;
  }
  }return;
  case 4130:
  isMutate = isAppend = true;
  appendNew = false;
  loadScript.append (" mutate");
  modelName = this.optParameterAsString (++i);
  tok = JS.T.getTokFromName (modelName);
  break;
  case 1073741839:
  isAppend = true;
  loadScript.append (" append");
  modelName = this.optParameterAsString (++i);
  tok = JS.T.getTokFromName (modelName);
  break;
  case 1073742077:
  doOrient = true;
  loadScript.append (" orientation");
  this.vwr.stm.saveOrientation ("preload", null);
  modelName = this.optParameterAsString (++i);
  tok = JS.T.getTokFromName (modelName);
  break;
  case 1073741851:
  isAudio = true;
  i++;
  break;
  case 1073741824:
  i++;
  loadScript.append (" " + modelName);
  tokType = (tok == 1073741824 && JU.PT.isOneOf (modelName.toLowerCase (), ";xyz;vxyz;vibration;temperature;occupancy;partialcharge;") ? JS.T.getTokFromName (modelName) : 0);
  if (tokType != 0) {
  htParams.put ("atomDataOnly", Boolean.TRUE);
  htParams.put ("modelNumber", Integer.$valueOf (1));
  if (tokType == 4166) tokType = 1145047055;
  tempFileInfo = this.vwr.fm.getFileInfo ();
  isAppend = true;
  }}
  switch (tok) {
  case 1228935687:
  i++;
  loadScript.append (" " + modelName);
  if (this.optParameterAsString (i).equals ("+")) {
  isConcat = true;
  i++;
  loadScript.append (" +");
  }if (this.optParameterAsString (i).equals ("-")) {
  isConcat = true;
  i++;
  loadScript.append (" -");
  }if (this.tokAt (i) == 7) {
  filenames = this.stringParameterSet (i);
  i = this.iToken;
  if (i + 1 != this.slen) this.invArg ();
  if (filenames != null) nFiles = filenames.length;
  }break;
  case 1073741984:
  isInline = true;
  i++;
  loadScript.append (" " + modelName);
  break;
  case 134218757:
  isSmiles = true;
  i++;
  break;
  case 1073741849:
  isAsync = true;
  htParams.put ("async", Boolean.TRUE);
  i++;
  break;
  case 536870926:
  case 1094717454:
  i++;
  loadScript.append (" " + modelName);
  if (tok == 536870926) htParams.put ("isTrajectory", Boolean.TRUE);
  if (this.isPoint3f (i)) {
  var pt = this.getPoint3f (i, false);
  i = this.iToken + 1;
  htParams.put ("firstLastStep",  Clazz.newIntArray (-1, [Clazz.floatToInt (pt.x), Clazz.floatToInt (pt.y), Clazz.floatToInt (pt.z)]));
  loadScript.append (" " + JU.Escape.eP (pt));
  } else {
  switch (this.tokAt (i)) {
  case 10:
  bsModels = this.getToken (i++).value;
  htParams.put ("bsModels", bsModels);
  loadScript.append (" " + JU.Escape.eBS (bsModels));
  break;
  default:
  htParams.put ("firstLastStep",  Clazz.newIntArray (-1, [0, -1, 1]));
  }
  }break;
  case 1073741824:
  break;
  case 134221834:
  var key = this.stringParameter (++i).toLowerCase ();
  isAppend = key.startsWith ("append");
  doOrient = (key.indexOf ("orientation") >= 0);
  i = this.addLoadData (loadScript, key, htParams, i);
  isData = true;
  break;
  default:
  modelName = "fileset";
  }
  if (filename == null && filenames == null && this.getToken (i).tok != 4) this.error (16);
  }var filePt = i;
  var ptAs = i + 1;
  var localName = null;
  if (this.tokAt (ptAs) == 1073741848) {
  localName = this.stringParameter (i = ptAs + 1);
  if (this.vwr.fm.getPathForAllFiles () !== "") {
  localName = null;
  filePt = i;
  }}var appendedData = null;
  var appendedKey = null;
  if (this.slen == i + 1) {
  if (filename == null && (i == 0 || filenames == null && (filename = this.paramAsStr (filePt)).length == 0)) filename = this.getFullPathName ();
  if (filename == null && filenames == null) {
  this.cmdZap (false);
  return;
  }if (filenames == null && !isInline) {
  if (isSmiles) {
  filename = "$" + filename;
  } else {
  if (filename.equals ("String[]")) return;
  if (filename.indexOf ("[") == 0) {
  filenames = JU.Escape.unescapeStringArray (filename);
  if (filenames != null) {
  if (i == 1) loadScript.append (" files");
  nFiles = filenames.length;
  }}}}if (filenames != null) for (var j = 0; j < nFiles; j++) loadScript.append (" /*file*/").append (JU.PT.esc (filenames[j]));
  
  } else if (this.isLoadOption (this.getToken (i + 1).tok)) {
  if (filename == null && (filename = this.paramAsStr (filePt)).length == 0 && (filename = this.getFullPathName ()) == null) {
  this.cmdZap (false);
  return;
  }if (filePt == i || localName != null) i++;
  if (filename.equals ("String[]")) return;
  if ((tok = this.tokAt (i)) == 1073742010) {
  var manifest = this.stringParameter (++i);
  htParams.put ("manifest", manifest);
  sOptions.append (" MANIFEST " + JU.PT.esc (manifest));
  tok = this.tokAt (++i);
  }switch (tok) {
  case 2:
  case 7:
  case 268435520:
  case 1073742195:
  i = this.getLoadModelIndex (i, sOptions, htParams);
  break;
  }
  i = this.getCmdExt ().getLoadSymmetryParams (i, sOptions, htParams);
  if (this.tokAt (i) == 1073741839) {
  if (this.tokAt (++i) == 134221834) {
  i += 2;
  appendedData = this.getToken (i++).value;
  appendedKey = this.stringParameter (++i);
  ++i;
  } else {
  appendedKey = this.stringParameter (i++);
  appendedData = this.stringParameter (i++);
  }htParams.put (appendedKey, appendedData);
  }if (this.tokAt (i) == 1073741940) filter = this.stringParameter (++i);
  } else {
  var fNames =  new JU.Lst ();
  if (i == 1) {
  if (this.tokAt (i + 1) == 268435617 || this.tokAt (i + 1) == 268435616) {
  modelName = "files";
  } else {
  i++;
  }loadScript.append (" " + modelName);
  }if (this.tokAt (i + 1) == 268435616) isConcat = true;
  filter = this.getLoadFilesList (i, loadScript, sOptions, htParams, fNames);
  filenames = fNames.toArray ( new Array (nFiles = fNames.size ()));
  if (!isConcat && loadScript.indexOf ("/*concat*/") >= 0) isConcat = true;
  }if (!doLoadFiles) return;
  if (filenames != null) filename = "fileSet";
  if (appendedData != null) {
  sOptions.append (" APPEND data \"" + appendedKey + "\"\n" + appendedData + (appendedData.endsWith ("\n") ? "" : "\n") + "end \"" + appendedKey + "\"");
  }if (filter == null) filter = this.vwr.g.defaultLoadFilter;
  if (filter.length > 0) {
  if (filter.toUpperCase ().indexOf ("DOCACHE") >= 0) {
  if (!this.$isStateScript && !isAppend) this.vwr.cacheClear ();
  }htParams.put ("filter", filter);
  if (filter.equalsIgnoreCase ("2d")) filter = "2D-noMin";
  sOptions.append (" FILTER " + JU.PT.esc (filter));
  }var isVariable = false;
  if (filenames == null) {
  if (filename.equals ("string") && this.vwr.am.cmi >= 0) {
  filename = this.vwr.getCurrentFileAsString (null);
  loadScript =  new JU.SB ().append ("load inline ");
  isInline = true;
  }if (isInline) {
  htParams.put ("fileData", filename);
  } else if (filename.startsWith ("@") && filename.length > 1) {
  var o = this.getVarParameter (filename.substring (1), false);
  if (Clazz.instanceOf (o, java.util.Map)) {
  this.checkLength (i + 1);
  this.loadPNGJVar (filename, o, htParams);
  return;
  }isVariable = true;
  o = "" + o;
  loadScript =  new JU.SB ().append ("{\n    var ").append (filename.substring (1)).append (" = ").append (JU.PT.esc (o)).append (";\n    ").appendSB (loadScript);
  htParams.put ("fileData", o);
  } else if ((this.vwr.testAsync || this.vwr.isJS) && (isAsync || filename.startsWith ("?")) || this.vwr.apiPlatform.forceAsyncLoad (filename)) {
  localName = null;
  filename = this.loadFileAsync ("LOAD" + (isAppend ? "_APPEND_" : "_"), filename, i, !isAppend && this.pc != this.pcResume);
  }}var out = null;
  var filecat = null;
  if (localName != null) {
  if (localName.equals (".")) localName = this.vwr.fm.getFilePath (filename, false, true);
  if (localName.length == 0 || this.vwr.fm.getFilePath (localName, false, false).equalsIgnoreCase (this.vwr.fm.getFilePath (filename, false, false))) this.invArg ();
  var fullPath =  Clazz.newArray (-1, [localName]);
  out = this.vwr.getOutputChannel (localName, fullPath);
  if (out == null) JU.Logger.error ("Could not create output stream for " + fullPath[0]);
   else htParams.put ("outputChannel", out);
  }if (filenames == null && tokType == 0) {
  loadScript.append (" ");
  if (isVariable || isInline) {
  loadScript.append (filename.indexOf ('\n') >= 0 || isVariable ? JU.PT.esc (filename) : filename);
  } else if (!isData) {
  if (localName != null) localName = this.vwr.fm.getFilePath (localName, false, false);
  if (!filename.equals ("String[]")) loadScript.append ("/*file*/").append ((localName != null ? JU.PT.esc (localName) : "$FILENAME$"));
  }if (!isConcat && (filename.startsWith ("=") || filename.startsWith ("*")) && filename.indexOf ("/") > 0) {
  isConcat = true;
  var pt = filename.indexOf ("/");
  var id;
  if (pt == 1 && (id = this.vwr.getPdbID ()) != null) {
  filename = filename.substring (0, 1) + id + filename.substring (1);
  pt = filename.indexOf ("/");
  } else {
  id = filename.substring (1, pt);
  }var ext = filename.substring (pt + 1);
  filename = filename.substring (0, pt);
  if ((pt = filename.indexOf (".")) >= 0) filename = filename.substring (0, pt);
  if (";dssr;rna3d;dom;val;".indexOf (";" + ext + ";") >= 0 || ext.startsWith ("dssr--")) {
  if (filename.startsWith ("=")) filename += ".cif";
  filenames = (ext.equals ("all") ?  Clazz.newArray (-1, [filename, "*dom/" + id, "*val/" + id]) :  Clazz.newArray (-1, [filename, "*" + ext + "/" + id]));
  filename = "fileSet";
  loadScript = null;
  isVariable = false;
  filecat = "-";
  } else {
  filename += "/" + ext;
  }}if (loadScript != null) {
  if (sOptions.length () > 0) loadScript.append (" /*options*/ ").append (sOptions.toString ());
  if (isVariable) loadScript.append ("\n  }");
  htParams.put ("loadScript", loadScript);
  }}if (isAudio) {
  if (filename != null) htParams.put ("audioFile", filename);
  this.addFilterAttribute (htParams, filter, "id");
  this.addFilterAttribute (htParams, filter, "pause");
  this.addFilterAttribute (htParams, filter, "play");
  this.addFilterAttribute (htParams, filter, "ended");
  this.addFilterAttribute (htParams, filter, "action");
  this.vwr.sm.playAudio (htParams);
  return;
  }this.setCursorWait (true);
  var timeMsg = this.vwr.getBoolean (603979934);
  if (timeMsg) JU.Logger.startTimer ("load");
  if (!this.$isStateScript && !isAppend) this.vwr.setBooleanProperty ("legacyJavaFloat", false);
  if (isMutate) htParams.put ("isMutate", Boolean.TRUE);
  htParams.put ("eval", this);
  errMsg = this.vwr.loadModelFromFile (null, filename, filenames, null, isAppend, htParams, loadScript, sOptions, tokType, filecat != null ? filecat : isConcat ? "+" : " ");
  if (timeMsg) this.showString (JU.Logger.getTimerMsg ("load", 0));
  if (out != null) {
  this.vwr.fm.setFileInfo ( Clazz.newArray (-1, [localName]));
  JU.Logger.info (J.i18n.GT.o (J.i18n.GT._ ("file {0} created"), localName));
  this.showString (this.vwr.fm.getFilePath (localName, false, false) + " created");
  out.closeChannel ();
  }if (tokType > 0) {
  this.vwr.fm.setFileInfo (tempFileInfo);
  if (errMsg != null && !this.isCmdLine_c_or_C_Option) this.evalError (errMsg, null);
  return;
  }if (errMsg != null && !this.isCmdLine_c_or_C_Option) {
  if (errMsg.indexOf ("NOTE: file recognized as a script file: ") == 0) {
  filename = errMsg.substring ("NOTE: file recognized as a script file: ".length).trim ();
  if (filename.indexOf ("png|") >= 0 && filename.endsWith ("pdb|state.spt")) {
  filename = filename.substring (0, filename.lastIndexOf ("|"));
  filename += filename.substring (filename.lastIndexOf ("|"));
  this.runScript ("load \"" + filename + "\"");
  return;
  }this.cmdScript (0, filename, null);
  return;
  }if (this.vwr.async && errMsg.startsWith (JV.JC.READER_NOT_FOUND)) {
  throw  new JS.ScriptInterruption (this, "async", 1);
  }this.evalError (errMsg, null);
  }if (this.debugHigh) this.report ("Successfully loaded:" + (filenames == null ? htParams.get ("fullPathName") : modelName), false);
  this.finalizeLoad (isAppend, appendNew, isConcat, doOrient, nFiles, ac0, modelCount0);
  });
  Clazz.defineMethod (c$, "addFilterAttribute",
   function (htParams, filter, key) {
  var val = JU.PT.getQuotedOrUnquotedAttribute (filter, key);
  if (val != null && val.length > 0) htParams.put (key, val);
  }, "java.util.Map,~S,~S");
  Clazz.defineMethod (c$, "addLoadData",
   function (loadScript, key, htParams, i) {
  loadScript.append (" /*data*/ data");
  var ptVar = key.indexOf ("@");
  if (ptVar >= 0) key = key.$replace ('@', '_');
  loadScript.append (" ").append (JU.PT.esc (key));
  var strModel = (ptVar >= 0 ? "" + this.getParameter (key.substring (ptVar + 1), 4, true) : this.paramAsStr (++i));
  strModel = JV.Viewer.fixInlineString (strModel, this.vwr.getInlineChar ());
  htParams.put ("fileData", strModel);
  htParams.put ("isData", Boolean.TRUE);
  loadScript.appendC ('\n').append (strModel).append (" end ").append (JU.PT.esc (key));
  if (ptVar < 0) i += 2;
  return i;
  }, "JU.SB,~S,java.util.Map,~N");
  Clazz.defineMethod (c$, "loadPNGJVar",
   function (varName, o, htParams) {
  var av =  Clazz.newArray (-1, [JS.SV.newV (6, o)]);
  this.getCmdExt ().dispatch (1073741866, false, av);
  htParams.put ("imageData", av[0].value);
  var out = this.vwr.getOutputChannel (null, null);
  htParams.put ("outputChannel", out);
  this.vwr.createZip ("", "BINARY", htParams);
  var modelName = "cache://VAR_" + varName;
  this.vwr.cacheFileByName ("cache://VAR_*", false);
  this.vwr.cachePut (modelName, out.toByteArray ());
  this.cmdScript (0, modelName, null);
  }, "~S,~O,java.util.Map");
  Clazz.defineMethod (c$, "getLoadFilesList",
   function (i, loadScript, sOptions, htParams, fNames) {
  var firstLastSteps = null;
  var filter = null;
  var pt = null;
  var bs = null;
  while (i < this.slen) {
  switch (this.tokAt (i)) {
  case 268435617:
  loadScript.append ("/*concat*/ +");
  ++i;
  continue;
  case 268435616:
  loadScript.append (" -");
  ++i;
  continue;
  case 2:
  case 7:
  case 268435520:
  case 1073742195:
  i = this.getLoadModelIndex (i, sOptions, htParams);
  continue;
  case 1073741940:
  filter = this.stringParameter (++i);
  ++i;
  continue;
  case 1073742329:
  htParams.remove ("isTrajectory");
  if (firstLastSteps == null) {
  firstLastSteps =  new JU.Lst ();
  pt = JU.P3.new3 (0, -1, 1);
  }if (this.isPoint3f (++i)) {
  pt = this.getPoint3f (i, false);
  i = this.iToken + 1;
  } else if (this.tokAt (i) == 10) {
  bs = this.getToken (i).value;
  pt = null;
  i = this.iToken + 1;
  }break;
  case 1073741824:
  this.invArg ();
  }
  fNames.addLast (this.paramAsStr (i++));
  if (pt != null) {
  firstLastSteps.addLast ( Clazz.newIntArray (-1, [Clazz.floatToInt (pt.x), Clazz.floatToInt (pt.y), Clazz.floatToInt (pt.z)]));
  loadScript.append (" COORD " + JU.Escape.eP (pt));
  } else if (bs != null) {
  firstLastSteps.addLast (bs);
  loadScript.append (" COORD " + JU.Escape.eBS (bs));
  }loadScript.append (" /*file*/$FILENAME" + fNames.size () + "$");
  }
  if (firstLastSteps != null) htParams.put ("firstLastSteps", firstLastSteps);
  return filter;
  }, "~N,JU.SB,JU.SB,java.util.Map,JU.Lst");
  Clazz.defineMethod (c$, "isLoadOption",
   function (tok) {
  switch (tok) {
  case 1073742010:
  case 2:
  case 7:
  case 268435520:
  case 1073742195:
  case 1073742332:
  case 8:
  case 1073742080:
  case 1094713350:
  case 1073742163:
  case 1073741938:
  case 1073742114:
  case 1073742152:
  case 1814695966:
  case 1073742066:
  case 134221834:
  case 1073741839:
  return true;
  case 1073741940:
  case 1073741824:
  return (this.tokAt (this.iToken + 2) != 1073742329);
  }
  return false;
  }, "~N");
  Clazz.defineMethod (c$, "getLoadModelIndex",
   function (i, sOptions, htParams) {
  var n;
  switch (this.tokAt (i)) {
  case 2:
  htParams.remove ("firstLastStep");
  htParams.remove ("bsModel");
  htParams.put ("useFileModelNumbers", Boolean.TRUE);
  n = this.intParameter (i);
  sOptions.append (" ").appendI (n);
  if (n < 0) htParams.put ("vibrationNumber", Integer.$valueOf (-n));
   else htParams.put ("modelNumber", Integer.$valueOf (n));
  break;
  case 7:
  case 268435520:
  case 1073742195:
  htParams.remove ("firstLastStep");
  var data = this.floatParameterSet (i, 1, 2147483647);
  var bs =  new JU.BS ();
  var iArray =  Clazz.newIntArray (data.length, 0);
  for (var j = 0; j < data.length; j++) {
  n = Clazz.floatToInt (data[j]);
  if (data[j] >= 1 && data[j] == n) bs.set (n - 1);
   else this.invArg ();
  iArray[j] = n;
  }
  sOptions.append (" " + JU.Escape.eAI (iArray));
  htParams.put ("bsModels", bs);
  htParams.put ("useFileModelNumbers", Boolean.TRUE);
  break;
  }
  return this.iToken + 1;
  }, "~N,JU.SB,java.util.Map");
  Clazz.defineMethod (c$, "finalizeLoad",
   function (isAppend, appendNew, isConcat, doOrient, nFiles, ac0, modelCount0) {
  if (isAppend && (appendNew || nFiles > 1)) {
  this.vwr.setAnimationRange (-1, -1);
  this.vwr.setCurrentModelIndex (modelCount0);
  }var msg;
  if (this.scriptLevel == 0 && !isAppend && (isConcat || nFiles < 2) && (msg = this.vwr.ms.getInfoM ("modelLoadNote")) != null) this.vwr.showString (msg, false);
  var centroid = this.vwr.ms.getInfoM ("centroidMinMax");
  if (JU.AU.isAI (centroid) && this.vwr.ms.ac > 0) {
  var bs = JU.BSUtil.newBitSet2 (isAppend ? ac0 : 0, this.vwr.ms.ac);
  this.vwr.ms.setCentroid (bs, centroid);
  }var script = this.vwr.g.defaultLoadScript;
  msg = "";
  if (script.length > 0) msg += "\nUsing defaultLoadScript: " + script;
  var embeddedScript;
  var info = this.vwr.ms.msInfo;
  if (info != null && this.vwr.allowEmbeddedScripts () && (embeddedScript = info.remove ("jmolscript")) != null && embeddedScript.length > 0) {
  msg += "\nAdding embedded #jmolscript: " + embeddedScript;
  script += ";" + embeddedScript;
  this.setStringProperty ("_loadScript", script);
  script = "allowEmbeddedScripts = false;try{" + script + "} allowEmbeddedScripts = true;";
  } else {
  this.setStringProperty ("_loadScript", "");
  }this.logLoadInfo (msg);
  var siteScript = (info == null ? null : info.remove ("sitescript"));
  if (siteScript != null) script = siteScript + ";" + script;
  if (doOrient) script += ";restore orientation preload";
  if (script.length > 0 && !this.isCmdLine_c_or_C_Option) this.runScript (script);
  }, "~B,~B,~B,~B,~N,~N,~N");
  Clazz.defineMethod (c$, "cmdLog",
   function () {
  if (this.slen == 1) this.bad ();
  if (this.chk) return;
  var s = this.parameterExpressionString (1, 0);
  if (this.tokAt (1) == 1073742334) this.setStringProperty ("logFile", "");
   else this.vwr.log (s);
  });
  Clazz.defineMethod (c$, "cmdLoop",
   function () {
  if (this.vwr.headless) return;
  if (!this.chk) this.pc = -1;
  this.cmdDelay ();
  });
  Clazz.defineMethod (c$, "cmdMessage",
   function () {
  var text = this.paramAsStr (this.checkLast (1));
  if (this.chk) return;
  var s = JU.Txt.formatText (this.vwr, text);
  if (this.outputBuffer == null && !this.vwr.isPrintOnly) JU.Logger.warn (s);
  if (!s.startsWith ("_")) this.report (s, false);
  });
  Clazz.defineMethod (c$, "cmdModel",
   function (offset) {
  var isFrame = (this.theTok == 4115 || this.vwr.ms.mc > 1);
  var frameList =  Clazz.newIntArray (-1, [-1, -1]);
  var nFrames = 0;
  var useModelNumber = true;
  var modelIndex = -1;
  if (this.slen == 1 && offset == 1) {
  modelIndex = this.vwr.am.cmi;
  var m;
  if (!this.chk && modelIndex >= 0 && (m = this.vwr.ms.getJmolDataSourceFrame (modelIndex)) >= 0) this.vwr.setCurrentModelIndex (m == modelIndex ? -2147483648 : m);
  return;
  }switch (this.tokAt (1)) {
  case 1073877010:
  if (!this.chk && isFrame && this.slen == 2) {
  while (++modelIndex < this.vwr.ms.mc) {
  if (!this.vwr.ms.am[modelIndex].auxiliaryInfo.containsKey ("moData")) continue;
  this.vwr.am.setFrame (modelIndex);
  this.showString ("Frame set to " + (modelIndex + 1));
  return;
  }
  this.showString ("No molecular orbitals");
  }return;
  case 2:
  if (isFrame && this.slen == 2) {
  if (!this.chk) this.vwr.am.setFrame (this.intParameter (1) - 1);
  return;
  }break;
  case 1073742325:
  case 10:
  modelIndex = this.atomExpressionAt (1).nextSetBit (0);
  if (this.chk || modelIndex < 0 || modelIndex >= this.vwr.ms.ac) return;
  modelIndex = this.vwr.ms.at[modelIndex].mi;
  if (this.iToken + 1 == this.slen) {
  this.vwr.setCurrentModelIndex (modelIndex);
  return;
  }frameList[nFrames++] = modelIndex;
  offset = this.iToken + 1;
  useModelNumber = false;
  break;
  case 1073741904:
  this.iToken = 1;
  var n = (this.tokAt (2) == 2 ? this.intParameter (++this.iToken) : 1);
  this.checkLength (this.iToken + 1);
  if (!this.chk && n > 0) this.vwr.ms.createModels (n);
  return;
  case 1073741974:
  this.checkLength (3);
  var id = this.stringParameter (2);
  if (!this.chk) this.vwr.setCurrentModelID (id);
  return;
  case 528397:
  var millis = 0;
  this.checkLength (3);
  switch (this.getToken (2).tok) {
  case 2:
  case 3:
  millis = Clazz.floatToLong (this.floatParameter (2) * 1000);
  break;
  default:
  this.error (20);
  }
  if (!this.chk) this.vwr.setFrameDelayMs (millis);
  return;
  case 1073742166:
  if (this.checkLength23 () > 0) if (!this.chk) this.vwr.setFrameTitleObj (this.slen == 2 ? "@{_modelName}" : (this.tokAt (2) == 7 ? JS.SV.strListValue (this.st[2]) : this.paramAsStr (2)));
  return;
  case 1073742077:
  if (this.tokAt (2) == 3 && this.tokAt (3) == 12) {
  modelIndex = this.vwr.ms.getModelNumberIndex (this.getToken (2).intValue, false, false);
  var mat4 = this.getToken (3).value;
  if (modelIndex >= 0) this.vwr.ms.am[modelIndex].mat4 = mat4;
  return;
  }break;
  case 1073741832:
  var isNone = (this.tokAt (2) == 1073742333);
  var bs = (this.slen == 2 || isNone ? null : this.atomExpressionAt (2));
  if (isNone) this.iToken = 2;
  var isFixed = (this.tokAt (this.iToken + 1) == 12293);
  this.checkLength (this.iToken + (isFixed ? 2 : 1));
  if (!this.chk) this.vwr.setFrameOffsets (bs, isFixed);
  return;
  }
  if (this.getToken (offset).tok == 268435616) {
  ++offset;
  if (this.getToken (this.checkLast (offset)).tok != 2 || this.intParameter (offset) != 1) this.invArg ();
  if (!this.chk) this.vwr.setAnimation (1073742108);
  return;
  }var isPlay = false;
  var isRange = false;
  var propName = null;
  var prop = null;
  var isAll = false;
  var isHyphen = false;
  var fFrame = 0;
  var frameAlign = null;
  var haveFileSet = this.vwr.haveFileSet ();
  if (this.isArrayParameter (1)) {
  this.setFrameSet (1);
  isAll = true;
  } else {
  for (var i = offset; i < this.slen; i++) {
  switch (this.getToken (i).tok) {
  case 1073741832:
  if (i != 2) this.invArg ();
  frameAlign = this.centerParameter (3, null);
  this.checkLength (i = this.iToken + 1);
  break;
  case 1073742327:
  case 268435633:
  this.checkLength (offset + (isRange ? 2 : 1));
  isAll = true;
  break;
  case 268435616:
  if (nFrames != 1) this.invArg ();
  isHyphen = true;
  break;
  case 1073742333:
  this.checkLength (offset + 1);
  break;
  case 3:
  useModelNumber = false;
  if ((fFrame = this.floatParameter (i)) < 0) {
  this.checkLength (i + 1);
  if (!this.chk) this.vwr.am.morph (-fFrame);
  return;
  }case 2:
  case 4:
  if (nFrames == 2) this.invArg ();
  var iFrame = (this.theTok == 4 ? JS.ScriptParam.getFloatEncodedInt (this.theToken.value) : this.theToken.intValue);
  if (iFrame < 0 && nFrames == 1) {
  isHyphen = true;
  iFrame = -iFrame;
  if (haveFileSet && iFrame < 1000000) iFrame *= 1000000;
  }if (this.theTok == 3 && haveFileSet && fFrame == Clazz.floatToInt (fFrame)) iFrame = Clazz.floatToInt (fFrame) * 1000000;
  if (iFrame == 2147483647) {
  useModelNumber = false;
  frameList[nFrames++] = (this.chk || i != 1 ? 0 : this.vwr.getModelIndexFromId (this.theToken.value.toString ()));
  break;
  }if (iFrame == -1) {
  this.checkLength (offset + 1);
  if (!this.chk) this.vwr.setAnimation (1073742108);
  return;
  }if (iFrame >= 1000 && iFrame < 1000000 && haveFileSet) iFrame = (Clazz.doubleToInt (iFrame / 1000)) * 1000000 + (iFrame % 1000);
  if (!useModelNumber && iFrame == 0 && nFrames == 0) isAll = true;
  if (iFrame >= 1000000) useModelNumber = false;
  frameList[nFrames++] = iFrame;
  break;
  case 1073742096:
  isPlay = true;
  break;
  case 1073742114:
  isRange = true;
  break;
  case 1715472409:
  if (modelIndex < 0 && (modelIndex = this.vwr.am.cmi) < 0) return;
  propName = this.paramAsStr (++i);
  var sv = this.setVariable (++i, -1, "", false);
  if (sv != null && !this.chk) {
  if (propName.equalsIgnoreCase ("DSSR")) {
  this.loadDssr (modelIndex, sv.value);
  return;
  }prop = JS.SV.oValue (sv);
  }if (!this.chk) this.vwr.ms.setInfo (modelIndex, propName, prop);
  return;
  default:
  this.frameControl (offset);
  return;
  }
  }
  }if (this.chk) return;
  if (isRange && nFrames == 0) isAll = true;
  if (isAll) {
  this.vwr.setAnimationOn (false);
  this.vwr.setAnimationRange (-1, -1);
  if (!isRange) this.vwr.setCurrentModelIndex (-1);
  return;
  }if (nFrames == 2 && !isRange) isHyphen = true;
  if (haveFileSet) useModelNumber = false;
   else if (useModelNumber) for (var i = 0; i < nFrames; i++) if (frameList[i] >= 0) frameList[i] %= 1000000;
  
  modelIndex = this.vwr.ms.getModelNumberIndex (frameList[0], useModelNumber, false);
  if (frameAlign != null) {
  if (modelIndex >= 0) {
  this.vwr.ms.translateModel (modelIndex, null);
  this.vwr.ms.translateModel (modelIndex, frameAlign);
  }return;
  }var modelIndex2 = -1;
  if (haveFileSet && modelIndex < 0 && frameList[0] != 0) {
  if (frameList[0] < 1000000) frameList[0] *= 1000000;
  if (nFrames == 2 && frameList[1] < 1000000) frameList[1] *= 1000000;
  if (frameList[0] % 1000000 == 0) {
  frameList[0]++;
  modelIndex = this.vwr.ms.getModelNumberIndex (frameList[0], false, false);
  if (modelIndex >= 0) {
  var i2 = (nFrames == 1 ? frameList[0] + 1000000 : frameList[1] == 0 ? -1 : frameList[1] % 1000000 == 0 ? frameList[1] + 1000001 : frameList[1] + 1);
  modelIndex2 = this.vwr.ms.getModelNumberIndex (i2, false, false);
  if (modelIndex2 < 0) modelIndex2 = this.vwr.ms.mc;
  modelIndex2--;
  if (isRange) nFrames = 2;
   else if (!isHyphen && modelIndex2 != modelIndex) isHyphen = true;
  isRange = isRange || modelIndex == modelIndex2;
  }} else {
  return;
  }}if (!isPlay && !isRange || modelIndex >= 0) this.vwr.setCurrentModelIndexClear (modelIndex, false);
  if (isPlay && nFrames == 2 || isRange || isHyphen) {
  if (modelIndex2 < 0) modelIndex2 = this.vwr.ms.getModelNumberIndex (frameList[1], useModelNumber, false);
  this.vwr.setAnimationOn (false);
  this.vwr.am.setAnimationDirection (1);
  this.vwr.setAnimationRange (modelIndex, modelIndex2);
  this.vwr.setCurrentModelIndexClear (isHyphen && !isRange ? -1 : modelIndex >= 0 ? modelIndex : 0, false);
  }if (isPlay) this.vwr.setAnimation (4143);
  }, "~N");
  Clazz.defineMethod (c$, "loadDssr",
   function (modelIndex, data) {
  if (modelIndex < 0 && (modelIndex = this.vwr.am.cmi) < 0) this.errorStr (30, "load <dssr file>");
  if (!data.startsWith ("{")) data = this.vwr.getFileAsString3 (data, true, "script");
  this.clearDefinedVariableAtomSets ();
  var map = this.vwr.parseJSONMap (data);
  this.showString (this.vwr.getAnnotationParser (true).fixDSSRJSONMap (map));
  this.vwr.ms.setInfo (modelIndex, "dssr", map);
  }, "~N,~S");
  Clazz.defineMethod (c$, "cmdMove",
   function () {
  this.checkLength (-11);
  var dRot = JU.V3.new3 (this.floatParameter (1), this.floatParameter (2), this.floatParameter (3));
  var dZoom = this.floatParameter (4);
  var dTrans = JU.V3.new3 (this.intParameter (5), this.intParameter (6), this.intParameter (7));
  var dSlab = this.floatParameter (8);
  var floatSecondsTotal = this.floatParameter (9);
  var fps = (this.slen == 11 ? this.intParameter (10) : 30);
  if (this.chk) return;
  this.refresh (false);
  if (!this.useThreads ()) floatSecondsTotal = 0;
  this.vwr.move (this, dRot, dZoom, dTrans, dSlab, floatSecondsTotal, fps);
  if (floatSecondsTotal > 0 && this.isJS) throw  new JS.ScriptInterruption (this, "move", 1);
  });
  Clazz.defineMethod (c$, "cmdMoveto",
   function () {
  if (this.slen == 2 && this.tokAt (1) == 1073742162) {
  if (!this.chk) this.vwr.tm.stopMotion ();
  return;
  }var floatSecondsTotal;
  if (this.slen == 2 && this.isFloatParameter (1)) {
  floatSecondsTotal = this.floatParameter (1);
  if (this.chk) return;
  if (!this.useThreads ()) floatSecondsTotal = 0;
  if (floatSecondsTotal > 0) this.refresh (false);
  this.vwr.moveTo (this, floatSecondsTotal, null, JV.JC.axisZ, 0, null, 100, 0, 0, 0, null, NaN, NaN, NaN, NaN, NaN, NaN);
  if (this.isJS && floatSecondsTotal > 0 && this.vwr.g.waitForMoveTo) throw  new JS.ScriptInterruption (this, "moveTo", 1);
  return;
  }var axis = JU.V3.new3 (NaN, 0, 0);
  var center = null;
  var i = 1;
  floatSecondsTotal = (this.isFloatParameter (i) ? this.floatParameter (i++) : 2.0);
  var degrees = 90;
  var bsCenter = null;
  var isChange = true;
  var isMolecular = false;
  var xTrans = 0;
  var yTrans = 0;
  var zoom = NaN;
  var rotationRadius = NaN;
  var zoom0 = this.vwr.tm.getZoomSetting ();
  var navCenter = null;
  var xNav = NaN;
  var yNav = NaN;
  var navDepth = NaN;
  var cameraDepth = NaN;
  var cameraX = NaN;
  var cameraY = NaN;
  var pymolView = null;
  var q = null;
  switch (this.getToken (i).tok) {
  case 1073742110:
  pymolView = this.floatParameterSet (++i, 18, 21);
  i = this.iToken + 1;
  if (this.chk && this.checkLength (i) > 0) return;
  break;
  case 134221850:
  if (this.tokAt (++i) == 1073742028) {
  isMolecular = true;
  i++;
  }if (this.isAtomExpression (i)) {
  isMolecular = true;
  var ret =  new Array (1);
  center = this.centerParameter (i, ret);
  if (!(Clazz.instanceOf (ret[0], JU.BS))) this.invArg ();
  bsCenter = ret[0];
  q = (this.chk ?  new JU.Quat () : this.vwr.ms.getQuaternion (bsCenter.nextSetBit (0), this.vwr.getQuaternionFrame ()));
  } else {
  q = this.getQuaternionParameter (i, null, false);
  }i = this.iToken + 1;
  if (q == null) this.invArg ();
  break;
  case 9:
  case 8:
  case 1073742332:
  if (this.isPoint3f (i)) {
  axis.setT (this.getPoint3f (i, true));
  i = this.iToken + 1;
  degrees = this.floatParameter (i++);
  } else {
  var pt4 = this.getPoint4f (i);
  i = this.iToken + 1;
  axis.set (pt4.x, pt4.y, pt4.z);
  degrees = (pt4.x == 0 && pt4.y == 0 && pt4.z == 0 ? NaN : pt4.w);
  }break;
  case 1073741954:
  axis.set (1, 0, 0);
  degrees = 0;
  this.checkLength (++i);
  break;
  case 1073741858:
  axis.set (0, 1, 0);
  degrees = 180;
  this.checkLength (++i);
  break;
  case 1073741996:
  axis.set (0, 1, 0);
  this.checkLength (++i);
  break;
  case 1073742126:
  axis.set (0, -1, 0);
  this.checkLength (++i);
  break;
  case 1073742172:
  axis.set (1, 0, 0);
  this.checkLength (++i);
  break;
  case 1073741871:
  axis.set (-1, 0, 0);
  this.checkLength (++i);
  break;
  case 1073741854:
  var abc = this.paramAsStr (++i);
  if (abc.equals ("-")) abc += this.paramAsStr (++i);
  this.checkLength (++i);
  switch ("xyz".indexOf (abc)) {
  case 0:
  q = JU.Quat.new4 (0.5, 0.5, 0.5, -0.5);
  break;
  case 1:
  q = JU.Quat.new4 (0.5, 0.5, 0.5, 0.5);
  break;
  case 2:
  q = JU.Quat.new4 (0, 0, 0, 1);
  break;
  default:
  var uc;
  uc = this.vwr.getCurrentUnitCell ();
  if (uc == null) {
  uc = this.vwr.getSymTemp ();
  uc.setUnitCell ( Clazz.newFloatArray (-1, [1, 1, 1, 90, 90, 90]), false);
  }q = uc.getQuaternionRotation (abc);
  if (q == null) this.invArg ();
  }
  break;
  default:
  axis = JU.V3.new3 (this.floatParameter (i++), this.floatParameter (i++), this.floatParameter (i++));
  degrees = this.floatParameter (i++);
  }
  if (q != null) {
  var aa;
  aa = q.toAxisAngle4f ();
  axis.set (aa.x, aa.y, aa.z);
  degrees = (isMolecular ? -1 : 1) * (aa.angle * 180.0 / 3.141592653589793);
  }if (Float.isNaN (axis.x) || Float.isNaN (axis.y) || Float.isNaN (axis.z)) axis.set (0, 0, 0);
   else if (axis.length () == 0 && degrees == 0) degrees = NaN;
  isChange = !this.vwr.tm.isInPosition (axis, degrees);
  if (this.isFloatParameter (i)) zoom = this.floatParameter (i++);
  if (this.isFloatParameter (i) && !this.isCenterParameter (i)) {
  xTrans = this.floatParameter (i++);
  yTrans = this.floatParameter (i++);
  if (!isChange && Math.abs (xTrans - this.vwr.tm.getTranslationXPercent ()) >= 1) isChange = true;
  if (!isChange && Math.abs (yTrans - this.vwr.tm.getTranslationYPercent ()) >= 1) isChange = true;
  }if (bsCenter == null && i != this.slen) {
  var ret =  new Array (1);
  center = this.centerParameter (i, ret);
  if (Clazz.instanceOf (ret[0], JU.BS)) bsCenter = ret[0];
  i = this.iToken + 1;
  }if (center != null) {
  if (!isChange && center.distance (this.vwr.tm.fixedRotationCenter) >= 0.1) isChange = true;
  if (this.isFloatParameter (i)) rotationRadius = this.floatParameter (i++);
  if (!this.isCenterParameter (i)) {
  if ((rotationRadius == 0 || Float.isNaN (rotationRadius)) && (zoom == 0 || Float.isNaN (zoom))) {
  var newZoom = Math.abs (this.getZoom (0, i, bsCenter, (zoom == 0 ? 0 : zoom0)));
  i = this.iToken + 1;
  zoom = newZoom;
  } else {
  if (!isChange && Math.abs (rotationRadius - this.vwr.getFloat (570425388)) >= 0.1) isChange = true;
  }}if (zoom == 0 || Float.isNaN (zoom)) zoom = 100;
  if (Float.isNaN (rotationRadius)) rotationRadius = 0;
  if (!isChange && Math.abs (zoom - zoom0) >= 1) isChange = true;
  if (i != this.slen) {
  navCenter = this.centerParameter (i, null);
  i = this.iToken + 1;
  if (i != this.slen) {
  xNav = this.floatParameter (i++);
  yNav = this.floatParameter (i++);
  }if (i != this.slen) navDepth = this.floatParameter (i++);
  if (i != this.slen) {
  cameraDepth = this.floatParameter (i++);
  if (!isChange && Math.abs (cameraDepth - this.vwr.tm.getCameraDepth ()) >= 0.01) isChange = true;
  }if (i + 1 < this.slen) {
  cameraX = this.floatParameter (i++);
  cameraY = this.floatParameter (i++);
  if (!isChange && Math.abs (cameraX - this.vwr.tm.camera.x) >= 0.01) isChange = true;
  if (!isChange && Math.abs (cameraY - this.vwr.tm.camera.y) >= 0.01) isChange = true;
  }}}this.checkLength (i);
  if (this.chk) return;
  if (!isChange) floatSecondsTotal = 0;
  if (floatSecondsTotal > 0) this.refresh (false);
  if (!this.useThreads ()) floatSecondsTotal = 0;
  if (cameraDepth == 0) {
  cameraDepth = cameraX = cameraY = NaN;
  }if (pymolView != null) this.vwr.tm.moveToPyMOL (this, floatSecondsTotal, pymolView);
   else this.vwr.moveTo (this, floatSecondsTotal, center, axis, degrees, null, zoom, xTrans, yTrans, rotationRadius, navCenter, xNav, yNav, navDepth, cameraDepth, cameraX, cameraY);
  if (this.isJS && floatSecondsTotal > 0 && this.vwr.g.waitForMoveTo) throw  new JS.ScriptInterruption (this, "moveTo", 1);
  });
  Clazz.defineMethod (c$, "isAtomExpression",
  function (i) {
  switch (this.tokAt (i)) {
  case 12290:
  case 10:
  case 1073742325:
  return true;
  default:
  return false;
  }
  }, "~N");
  Clazz.defineMethod (c$, "cmdPause",
   function () {
  if (this.chk || this.isJS && !this.allowJSThreads) return false;
  var msg = this.optParameterAsString (1);
  if (!this.vwr.getBooleanProperty ("_useCommandThread")) {
  }if (this.vwr.autoExit || !this.vwr.haveDisplay && !this.vwr.isWebGL) return false;
  if (this.scriptLevel == 0 && this.pc == this.aatoken.length - 1) {
  this.vwr.scriptStatus ("nothing to pause: " + msg);
  return false;
  }msg = (msg.length == 0 ? ": RESUME to continue." : ": " + JU.Txt.formatText (this.vwr, msg));
  this.pauseExecution (true);
  this.vwr.scriptStatusMsg ("script execution paused" + msg, "script paused for RESUME");
  return true;
  });
  Clazz.defineMethod (c$, "cmdPrint",
   function () {
  if (this.slen == 1) {
  if (!this.chk) this.showStringPrint ("\0", true);
  return;
  }this.showStringPrint (this.parameterExpressionString (1, 0), true);
  });
  Clazz.defineMethod (c$, "cmdPrompt",
   function () {
  var msg = null;
  if (this.slen == 1) {
  if (!this.chk) msg = JS.ScriptEval.getContextTrace (this.vwr, this.getScriptContext ("prompt"), null, true).toString ();
  } else {
  msg = this.parameterExpressionString (1, 0);
  }if (!this.chk) this.vwr.prompt (msg, null, null, true);
  });
  Clazz.defineMethod (c$, "cmdReset",
   function () {
  if (this.slen == 3 && this.tokAt (1) == 134320141) {
  if (!this.chk) this.vwr.removeFunction (this.stringParameter (2));
  return;
  }this.checkLength (-2);
  if (this.chk) return;
  if (this.slen == 1) {
  this.vwr.reset (false);
  return;
  }switch (this.tokAt (1)) {
  case 36865:
  if (!this.chk && this.outputBuffer != null) this.outputBuffer.setLength (0);
  return;
  case 134221829:
  this.vwr.cacheClear ();
  return;
  case 1073741936:
  this.resetError ();
  return;
  case 1073741995:
  this.vwr.stm.resetLighting ();
  return;
  case 1086324748:
  this.vwr.resetShapes (true);
  return;
  case 134320141:
  this.vwr.clearFunctions ();
  return;
  case 1639976963:
  var bsModified =  new JU.BS ();
  this.runScript (this.vwr.ms.getDefaultStructure (this.vwr.bsA (), bsModified));
  this.vwr.shm.resetBioshapes (bsModified);
  return;
  case 1648363544:
  this.vwr.setData ("element_vdw",  Clazz.newArray (-1, [null, ""]), 0, 0, 0, 0, 0);
  return;
  case 1075838996:
  this.vwr.ms.resetAromatic ();
  return;
  case 1611141175:
  this.vwr.reset (true);
  return;
  }
  var $var = this.paramAsStr (1);
  if ($var.charAt (0) == '_') this.invArg ();
  this.vwr.unsetProperty ($var);
  });
  Clazz.defineMethod (c$, "resetError",
   function () {
  this.vwr.g.removeParam ("_errormessage");
  });
  Clazz.defineMethod (c$, "cmdRestrict",
   function () {
  var isBond = (this.tokAt (1) == 1677721602);
  this.cmdSelect (isBond ? 2 : 1);
  this.restrictSelected (isBond, true);
  });
  Clazz.defineMethod (c$, "cmdReturn",
   function (tv) {
  if (this.chk) return;
  var t = this.getContextVariableAsVariable ("_retval", false);
  if (t != null) {
  var v = (tv != null || this.slen == 1 ? null : this.parameterExpressionToken (1));
  if (tv == null) tv = (v == null ? JS.SV.newI (0) : v);
  t.value = tv.value;
  t.intValue = tv.intValue;
  t.tok = tv.tok;
  }this.cmdGoto (false);
  }, "JS.SV");
  Clazz.defineMethod (c$, "cmdRotate",
   function (isSpin, isSelected) {
  if (this.slen == 2) switch (this.getToken (1).tok) {
  case 1073742335:
  if (!this.chk) this.vwr.tm.setSpinOn ();
  return;
  case 1073742334:
  if (!this.chk) this.vwr.tm.setSpinOff ();
  return;
  }
  var bsAtoms = null;
  var bsBest = null;
  var degreesPerSecond = 1.4E-45;
  var nPoints = 0;
  var endDegrees = 3.4028235E38;
  var isMolecular = false;
  var haveRotation = false;
  var dihedralList = null;
  var ptsA = null;
  var points =  new Array (2);
  var rotAxis = JU.V3.new3 (0, 1, 0);
  var translation = null;
  var m4 = null;
  var m3 = null;
  var is4x4 = false;
  var direction = 1;
  var tok;
  var q = null;
  var helicalPath = false;
  var isDegreesPerSecond = false;
  var isSeconds = false;
  var ptsB = null;
  var bsCompare = null;
  var invPoint = null;
  var invPlane = null;
  var axesOrientationRasmol = this.vwr.getBoolean (603979806);
  for (var i = 1; i < this.slen; ++i) {
  switch (tok = this.getToken (i).tok) {
  case 12290:
  case 10:
  case 1073742325:
  bsBest = this.atomExpressionAt (i);
  if (translation != null || q != null || nPoints == 2) {
  bsAtoms = bsBest;
  ptsB = null;
  isSelected = true;
  break;
  }case 1073742332:
  case 8:
  case 1073742330:
  haveRotation = true;
  if (nPoints == 2) nPoints = 0;
  var pt1 = this.centerParameterForModel (i, this.vwr.am.cmi, null);
  if (!this.chk && tok == 1073742330 && this.tokAt (i + 2) != 268435520) {
  isMolecular = true;
  var data =  Clazz.newArray (-1, [this.objectNameParameter (++i), Integer.$valueOf (this.vwr.am.cmi), null]);
  rotAxis = (this.getShapePropertyData (22, "getSpinAxis", data) ? data[2] : null);
  }points[nPoints++] = pt1;
  break;
  case 1611141175:
  isSpin = true;
  continue;
  case 1073741988:
  case 1073742028:
  isMolecular = true;
  continue;
  case 1113589787:
  isSelected = true;
  break;
  case 268435504:
  continue;
  case 2:
  case 3:
  if (isSpin) {
  if (degreesPerSecond == 1.4E-45) {
  degreesPerSecond = this.floatParameter (i);
  } else if (endDegrees == 3.4028235E38) {
  endDegrees = degreesPerSecond;
  degreesPerSecond = this.floatParameter (i);
  } else {
  this.invArg ();
  }} else {
  if (endDegrees == 3.4028235E38) {
  endDegrees = this.floatParameter (i);
  } else if (degreesPerSecond == 1.4E-45) {
  degreesPerSecond = this.floatParameter (i);
  isSpin = true;
  } else {
  this.invArg ();
  }}if (i == this.slen - 2 && (this.tokAt (i + 1) == 1073741824 || this.tokAt (i + 1) == 4)) {
  var s = this.paramAsStr (++i).toLowerCase ();
  if (s.equals ("dps")) {
  isDegreesPerSecond = true;
  } else if (s.equals ("sec")) {
  isSeconds = true;
  }}break;
  case 268435616:
  direction = -1;
  continue;
  case 1111492629:
  haveRotation = true;
  rotAxis.set (direction, 0, 0);
  continue;
  case 1111492630:
  haveRotation = true;
  rotAxis.set (0, direction, 0);
  continue;
  case 1111492631:
  haveRotation = true;
  rotAxis.set (0, 0, (axesOrientationRasmol && !isMolecular ? -direction : direction));
  continue;
  case 9:
  case 134221850:
  case 1073741864:
  if (tok == 134221850) i++;
  haveRotation = true;
  if ((q = this.getQuaternionParameter (i, bsBest, tok == 1073741864)) != null) {
  if (q.q0 == 0) q.q0 = 1e-10;
  rotAxis.setT (q.getNormal ());
  endDegrees = q.getTheta ();
  }break;
  case 134217750:
  var pts;
  var n;
  if (this.paramAsStr (i + 1).equalsIgnoreCase ("picked")) {
  i++;
  var lst = this.vwr.getPOrNull ("pickedList");
  n = lst.size ();
  if (n < 3) return;
  pts =  new Array (3);
  for (var j = 0; j < 3; j++) pts[j] = this.vwr.ms.getAtomSetCenter (JS.SV.getBitSet (lst.get (n - 3 + j), false));
  
  } else if (this.isArrayParameter (i + 1)) {
  pts = this.getPointArray (++i, -1, false);
  i = this.iToken;
  } else {
  pts =  new Array (3);
  for (var j = 0; j < 3; j++) {
  pts[j] = this.centerParameter (++i, null);
  i = this.iToken;
  }
  }n = pts.length;
  if (n < 3) return;
  q = JU.Quat.getQuaternionFrame (pts[n - 3], pts[n - 2], pts[n - 1]);
  q = JU.Quat.new4 (1, 0, 0, 0).mulQ (q.inv ().div (this.vwr.tm.getRotationQ ()));
  rotAxis.setT (q.getNormal ());
  endDegrees = q.getTheta ();
  break;
  case 134217731:
  haveRotation = true;
  if (this.isPoint3f (++i)) {
  rotAxis.setT (this.centerParameter (i, null));
  break;
  }var p4 = this.getPoint4f (i);
  rotAxis.set (p4.x, p4.y, p4.z);
  endDegrees = p4.w;
  q = JU.Quat.newVA (rotAxis, endDegrees);
  break;
  case 1073742328:
  isSelected = true;
  isMolecular = true;
  haveRotation = true;
  if (this.isArrayParameter (++i)) {
  dihedralList = this.floatParameterSet (i, 6, 2147483647);
  i = this.iToken;
  } else {
  var iAtom1 = this.atomExpressionAt (i).nextSetBit (0);
  var iAtom2 = this.atomExpressionAt (++this.iToken).nextSetBit (0);
  if (iAtom1 < 0 || iAtom2 < 0) return;
  bsAtoms = this.vwr.getBranchBitSet (iAtom2, iAtom1, true);
  points[0] = this.vwr.ms.at[iAtom1];
  points[1] = this.vwr.ms.at[iAtom2];
  nPoints = 2;
  }break;
  case 4160:
  translation = JU.V3.newV (this.centerParameter (++i, null));
  isMolecular = isSelected = true;
  break;
  case 136314895:
  helicalPath = true;
  continue;
  case 1296041986:
  var symop = this.intParameter (++i);
  if (this.chk) continue;
  var info = this.vwr.getSymTemp ().getSpaceGroupInfo (this.vwr.ms, null, -1, false);
  var op = (info == null ? null : info.get ("operations"));
  if (symop == 0 || op == null || op.length < Math.abs (symop)) this.invArg ();
  op = op[Math.abs (symop) - 1];
  translation = op[5];
  invPoint = op[6];
  points[0] = op[7];
  if (op[8] != null) rotAxis = op[8];
  endDegrees = (op[9]).intValue ();
  if (symop < 0) {
  endDegrees = -endDegrees;
  if (translation != null) translation.scale (-1);
  }if (endDegrees == 0 && points[0] != null) {
  rotAxis.normalize ();
  JU.Measure.getPlaneThroughPoint (points[0], rotAxis, invPlane =  new JU.P4 ());
  }q = JU.Quat.newVA (rotAxis, endDegrees);
  nPoints = (points[0] == null ? 0 : 1);
  isMolecular = true;
  haveRotation = true;
  isSelected = true;
  continue;
  case 134221831:
  bsCompare = this.atomExpressionAt (++i);
  ptsA = this.vwr.ms.getAtomPointVector (bsCompare);
  if (ptsA == null) {
  this.iToken = i;
  this.invArg ();
  }i = this.iToken;
  ptsB = this.getPointVector (this.getToken (++i), i);
  if (ptsB == null || ptsA.size () != ptsB.size ()) {
  this.iToken = i;
  this.invArg ();
  }m4 =  new JU.M4 ();
  points[0] =  new JU.P3 ();
  nPoints = 1;
  J.api.Interface.getInterface ("JU.Eigen", this.vwr, "script");
  var stddev = (this.chk ? 0 : JU.Measure.getTransformMatrix4 (ptsA, ptsB, m4, points[0]));
  if (stddev > 0.001) ptsB = null;
  case 12:
  case 11:
  haveRotation = true;
  m3 =  new JU.M3 ();
  if (tok == 12) {
  is4x4 = true;
  m4 = this.theToken.value;
  }if (m4 != null) {
  translation =  new JU.V3 ();
  m4.getTranslation (translation);
  m4.getRotationScale (m3);
  } else {
  m3 = this.theToken.value;
  }q = (this.chk ?  new JU.Quat () : JU.Quat.newM (m3));
  rotAxis.setT (q.getNormal ());
  endDegrees = q.getTheta ();
  isMolecular = true;
  break;
  default:
  this.invArg ();
  }
  i = this.iToken;
  }
  if (this.chk) return;
  if (dihedralList != null) {
  if (endDegrees != 3.4028235E38) {
  isSpin = true;
  degreesPerSecond = endDegrees;
  }}if (isSelected && bsAtoms == null) bsAtoms = this.vwr.bsA ();
  if (bsCompare != null) {
  isSelected = true;
  if (bsAtoms == null) bsAtoms = bsCompare;
  }if (q != null && !isSeconds && !isDegreesPerSecond) {
  isDegreesPerSecond = (degreesPerSecond > 0);
  isSeconds = !isDegreesPerSecond;
  }var rate = (degreesPerSecond == 1.4E-45 ? 10 : endDegrees == 3.4028235E38 ? degreesPerSecond : isDegreesPerSecond ? degreesPerSecond : isSeconds ? (endDegrees < 0 ? -1 : 1) * Math.abs (endDegrees / degreesPerSecond) : (degreesPerSecond < 0) == (q == null ? endDegrees > 0 : true) ? -endDegrees / degreesPerSecond : degreesPerSecond);
  if (q == null && endDegrees < 0 && rate > 0) rate = -rate;
  if (dihedralList != null) {
  if (!isSpin) {
  this.vwr.setDihedrals (dihedralList, null, 1);
  return;
  }translation = null;
  }if (q != null) {
  if (nPoints == 0 && translation != null && !is4x4) points[0] = this.vwr.ms.getAtomSetCenter (bsAtoms != null ? bsAtoms : isSelected ? this.vwr.bsA () : this.vwr.getAllAtoms ());
  if (helicalPath && translation != null) {
  points[1] = JU.P3.newP (points[0]);
  points[1].add (translation);
  var ret = JU.Measure.computeHelicalAxis (points[0], points[1], q);
  points[0] = ret[0];
  var theta = (ret[3]).x;
  if (theta != 0) {
  translation = ret[1];
  rotAxis = JU.V3.newV (translation);
  if (theta < 0) rotAxis.scale (-1);
  }m4 = null;
  }if (isSpin && m4 == null) m4 = JS.ScriptMathProcessor.getMatrix4f (q.getMatrix (), translation);
  if (points[0] != null) nPoints = 1;
  }if (invPoint != null) {
  this.vwr.invertAtomCoordPt (invPoint, bsAtoms);
  if (rotAxis == null) return;
  }if (invPlane != null) {
  this.vwr.invertAtomCoordPlane (invPlane, bsAtoms);
  if (rotAxis == null) return;
  }var requiresThread = (isSpin && (!this.vwr.headless || endDegrees == 3.4028235E38));
  if (isSpin && !requiresThread) isSpin = false;
  if (nPoints < 2 && dihedralList == null) {
  if (!isMolecular) {
  if (requiresThread && bsAtoms == null && !this.useThreads ()) {
  isSpin = false;
  if (endDegrees == 3.4028235E38) return;
  }if (this.vwr.rotateAxisAngleAtCenter (this, points[0], rotAxis, rate, endDegrees, isSpin, bsAtoms)) {
  if (this.isJS && isSpin && bsAtoms == null && this.vwr.g.waitForMoveTo && endDegrees != 3.4028235E38) throw  new JS.ScriptInterruption (this, "rotate", 1);
  }return;
  }if (nPoints == 0) points[0] =  new JU.P3 ();
  points[1] = JU.P3.newP (points[0]);
  points[1].add (rotAxis);
  nPoints = 2;
  }if (nPoints == 0) points[0] =  new JU.P3 ();
  if (nPoints < 2 || points[0].distance (points[1]) == 0) {
  points[1] = JU.P3.newP (points[0]);
  points[1].y += 1.0;
  }if (endDegrees == 3.4028235E38) endDegrees = 0;
  if (endDegrees != 0 && translation != null && !haveRotation) translation.scale (endDegrees / translation.length ());
  if (isSpin && translation != null && (endDegrees == 0 || degreesPerSecond == 0)) {
  endDegrees = 0.01;
  rate = (degreesPerSecond == 1.4E-45 ? 0.01 : degreesPerSecond < 0 ? -endDegrees / degreesPerSecond : degreesPerSecond * 0.01 / translation.length ());
  degreesPerSecond = 0.01;
  }if (bsAtoms != null && isSpin && ptsB == null && m4 != null) {
  ptsA = this.vwr.ms.getAtomPointVector (bsAtoms);
  ptsB = JU.Measure.transformPoints (ptsA, m4, points[0]);
  }if (bsAtoms != null && !isSpin && ptsB != null) {
  this.vwr.setAtomCoords (bsAtoms, 1145047050, ptsB);
  } else {
  if (requiresThread && !this.useThreads ()) return;
  if (this.vwr.rotateAboutPointsInternal (this, points[0], points[1], rate, endDegrees, isSpin, bsAtoms, translation, ptsB, dihedralList, is4x4 ? m4 : null) && this.isJS && isSpin) throw  new JS.ScriptInterruption (this, "rotate", 1);
  }}, "~B,~B");
  Clazz.defineMethod (c$, "cmdRestore",
   function () {
  if (this.slen > 1) {
  var saveName = this.optParameterAsString (2);
  var tok = this.tokAt (1);
  switch (tok) {
  case 1814695966:
  if (!this.chk) this.setCurrentCagePts (null, null);
  return;
  case 1073742077:
  case 1073742132:
  case 1073742139:
  var floatSecondsTotal = (this.slen > 3 ? this.floatParameter (3) : 0);
  if (floatSecondsTotal < 0) this.invArg ();
  if (this.chk) return;
  var type = "";
  switch (tok) {
  case 1073742077:
  type = "Orientation";
  this.vwr.stm.restoreOrientation (saveName, floatSecondsTotal, true);
  break;
  case 1073742132:
  type = "Rotation";
  this.vwr.stm.restoreOrientation (saveName, floatSecondsTotal, false);
  break;
  case 1073742139:
  type = "Scene";
  this.vwr.stm.restoreScene (saveName, floatSecondsTotal);
  break;
  }
  if (this.isJS && floatSecondsTotal > 0 && this.vwr.g.waitForMoveTo) throw  new JS.ScriptInterruption (this, "restore" + type, 1);
  return;
  }
  this.checkLength23 ();
  switch (tok) {
  case 1677721602:
  if (!this.chk) this.vwr.stm.restoreBonds (saveName);
  return;
  case 14:
  if (this.chk) return;
  var sc = this.vwr.stm.getContext (saveName);
  if (sc != null) {
  this.restoreScriptContext (sc, true, false, false);
  if (this.thisContext != null) {
  this.thisContext.setMustResume ();
  this.mustResumeEval = true;
  this.tQuiet = true;
  }}return;
  case 1073742329:
  if (this.chk) return;
  var script = this.vwr.stm.getSavedCoordinates (saveName);
  if (script == null) this.invArg ();
  this.runScript (script);
  this.vwr.checkCoordinatesChanged ();
  return;
  case 1073742140:
  if (!this.chk) this.vwr.stm.restoreSelection (saveName);
  return;
  case 1073742158:
  if (this.chk) return;
  var state = this.vwr.stm.getSavedState (saveName);
  if (state == null) this.invArg ();
  this.runScript (state);
  return;
  case 1639976963:
  if (this.chk) return;
  var shape = this.vwr.stm.getSavedStructure (saveName);
  if (shape == null) this.invArg ();
  this.runScript (shape);
  return;
  }
  }this.errorStr2 (53, "RESTORE", "bonds? context? coordinates? orientation? rotation? selection? state? structure?");
  });
  Clazz.defineMethod (c$, "cmdSave",
   function () {
  if (this.slen > 1) {
  var saveName = this.optParameterAsString (2);
  switch (this.tokAt (1)) {
  case 1677721602:
  if (!this.chk) this.vwr.stm.saveBonds (saveName);
  return;
  case 14:
  if (!this.chk) this.saveContext (saveName);
  return;
  case 1073742329:
  if (!this.chk) this.vwr.stm.saveCoordinates (saveName, this.vwr.bsA ());
  return;
  case 1073742077:
  case 1073742132:
  if (!this.chk) this.vwr.stm.saveOrientation (saveName, null);
  return;
  case 1073742140:
  if (!this.chk) {
  this.vwr.stm.saveSelection (saveName, this.vwr.bsA ());
  this.vwr.stm.restoreSelection (saveName);
  }return;
  case 1073742158:
  if (!this.chk) this.vwr.stm.saveState (saveName);
  return;
  case 1639976963:
  if (!this.chk) this.vwr.stm.saveStructure (saveName);
  return;
  }
  }this.errorStr2 (53, "SAVE", "bonds? context? coordinates? orientation? rotation? selection? state? structure?");
  });
  Clazz.defineMethod (c$, "cmdScript",
  function (tok, filename, theScript) {
  if (tok == 134238732) {
  this.checkLength (2);
  if (!this.chk) this.vwr.jsEval (this.paramAsStr (1));
  return;
  }var loadCheck = true;
  var isCheck = false;
  var doStep = false;
  var isAsync = this.vwr.async;
  var lineNumber = 0;
  var pc = 0;
  var lineEnd = 0;
  var pcEnd = 0;
  var i = 1;
  var localPath = null;
  var remotePath = null;
  var scriptPath = null;
  var params = null;
  if (tok == 4124) {
  i = -2;
  }if (filename == null && theScript == null) {
  tok = this.tokAt (i);
  if (tok != 4) this.error (16);
  filename = this.paramAsStr (i);
  if (filename.equalsIgnoreCase ("async")) {
  isAsync = true;
  filename = this.paramAsStr (++i);
  }if (filename.equalsIgnoreCase ("applet")) {
  var appID = this.paramAsStr (++i);
  theScript = this.parameterExpressionString (++i, 0);
  this.checkLast (this.iToken);
  if (this.chk) return;
  if (appID.length == 0 || appID.equals ("all")) appID = "*";
  if (!appID.equals (".")) {
  this.vwr.jsEval (appID + "\1" + theScript);
  if (!appID.equals ("*")) return;
  }} else {
  tok = this.tokAt (this.slen - 1);
  doStep = (tok == 266298);
  if (filename.equalsIgnoreCase ("inline")) {
  theScript = this.parameterExpressionString (++i, (doStep ? this.slen - 1 : 0));
  i = this.iToken;
  }while (filename.equalsIgnoreCase ("localPath") || filename.equalsIgnoreCase ("remotePath") || filename.equalsIgnoreCase ("scriptPath")) {
  if (filename.equalsIgnoreCase ("localPath")) localPath = this.paramAsStr (++i);
   else if (filename.equalsIgnoreCase ("scriptPath")) scriptPath = this.paramAsStr (++i);
   else remotePath = this.paramAsStr (++i);
  filename = this.paramAsStr (++i);
  }
  if ((this.vwr.isJS || this.vwr.testAsync) && (isAsync || filename.startsWith ("?"))) {
  filename = this.loadFileAsync ("SCRIPT_", filename, i, true);
  }if ((tok = this.tokAt (++i)) == 1073741878) {
  isCheck = true;
  tok = this.tokAt (++i);
  }if (tok == 1073742050) {
  loadCheck = false;
  tok = this.tokAt (++i);
  }if (tok == 1073741998 || tok == 1140850692) {
  i++;
  lineEnd = lineNumber = Math.max (this.intParameter (i++), 0);
  if (this.checkToken (i)) {
  if (this.getToken (i).tok == 268435616) lineEnd = (this.checkToken (++i) ? this.intParameter (i++) : 0);
   else lineEnd = -this.intParameter (i++);
  if (lineEnd <= 0) this.invArg ();
  }} else if (tok == 1073741890 || tok == 1073741892) {
  i++;
  pc = Math.max (this.intParameter (i++) - 1, 0);
  pcEnd = pc + 1;
  if (this.checkToken (i)) {
  if (this.getToken (i).tok == 268435616) pcEnd = (this.checkToken (++i) ? this.intParameter (i++) : 0);
   else pcEnd = -this.intParameter (i++);
  if (pcEnd <= 0) this.invArg ();
  }}i = -i;
  }} else if (filename != null && isAsync) {
  filename = this.loadFileAsync ("SCRIPT_", filename, i, true);
  }if (i < 0) {
  if (this.tokAt (i = -i) == 268435472) {
  params = this.parameterExpressionList (i, -1, false);
  i = this.iToken + 1;
  }this.checkLength (doStep ? i + 1 : i);
  }if (this.chk && !this.isCmdLine_c_or_C_Option) return;
  if (this.isCmdLine_c_or_C_Option) isCheck = true;
  var wasSyntaxCheck = this.chk;
  var wasScriptCheck = this.isCmdLine_c_or_C_Option;
  if (isCheck) this.chk = this.isCmdLine_c_or_C_Option = true;
  this.pushContext (null, "SCRIPT");
  this.contextPath += " >> " + filename;
  if (theScript == null ? this.compileScriptFileInternal (filename, localPath, remotePath, scriptPath) : this.compileScript (null, theScript, false)) {
  this.pcEnd = pcEnd;
  this.lineEnd = lineEnd;
  while (pc < this.lineNumbers.length && this.lineNumbers[pc] < lineNumber) pc++;
  
  this.pc = pc;
  var saveLoadCheck = this.isCmdLine_C_Option;
  this.isCmdLine_C_Option = new Boolean (this.isCmdLine_C_Option & loadCheck).valueOf ();
  this.executionStepping = new Boolean (this.executionStepping | doStep).valueOf ();
  if (this.contextVariables == null) this.contextVariables =  new java.util.Hashtable ();
  this.contextVariables.put ("_arguments", (params == null ? JS.SV.getVariableAI ( Clazz.newIntArray (-1, [])) : JS.SV.getVariableList (params)));
  this.contextVariables.put ("_argcount", JS.SV.newI (params == null ? 0 : params.size ()));
  if (isCheck) this.listCommands = true;
  var timeMsg = this.vwr.getBoolean (603979934);
  if (timeMsg) JU.Logger.startTimer ("script");
  this.dispatchCommands (false, false, false);
  if (this.$isStateScript) JS.ScriptManager.setStateScriptVersion (this.vwr, null);
  if (timeMsg) this.showString (JU.Logger.getTimerMsg ("script", 0));
  this.isCmdLine_C_Option = saveLoadCheck;
  this.popContext (false, false);
  } else {
  JU.Logger.error (J.i18n.GT._ ("script ERROR: ") + this.errorMessage);
  this.popContext (false, false);
  if (wasScriptCheck) {
  this.setErrorMessage (null);
  } else {
  this.evalError (null, null);
  }}this.chk = wasSyntaxCheck;
  this.isCmdLine_c_or_C_Option = wasScriptCheck;
  }, "~N,~S,~S");
  Clazz.defineMethod (c$, "cmdSelect",
   function (i) {
  if (this.slen == 1) {
  this.vwr.select (null, false, 0, !this.doReport ());
  return;
  }if (this.slen == 2 && this.tokAt (1) == 1073742072) return;
  var tok = this.tokAt (2);
  this.vwr.slm.noneSelected = Boolean.$valueOf (this.slen == 4 && tok == 1073742333);
  var bs = null;
  switch (tok) {
  case 10:
  if (Clazz.instanceOf (this.getToken (2).value, JM.BondSet) || this.tokAt (2) == 1677721602 && this.getToken (3).tok == 10) {
  if (this.slen != this.iToken + 2) this.invArg ();
  if (!this.chk) this.vwr.selectBonds (this.theToken.value);
  return;
  }break;
  case 1745489939:
  case 1677721602:
  if (this.slen == 5 && this.tokAt (3) == 10) {
  bs = this.getToken (3).value;
  this.iToken++;
  } else if (this.isArrayParameter (4)) {
  bs =  new JU.BS ();
  var a = this.expandFloatArray (this.floatParameterSet (4, 0, 2147483647), 0);
  for (var ii = a.length; --ii >= 0; ) if (a[ii] >= 0) bs.set (a[ii]);
  
  }this.checkLast (this.iToken);
  if (this.chk) return;
  if (bs == null) this.invArg ();
  if (tok == 1745489939) this.setShapeProperty (6, "select", bs);
   else this.vwr.selectBonds (bs);
  return;
  }
  var addRemove = 0;
  var isGroup = false;
  if (this.getToken (1).intValue == 0 && this.theTok != 1073742334) {
  var v = this.parameterExpressionToken (0).value;
  if (!(Clazz.instanceOf (v, JU.BS))) this.invArg ();
  this.checkLast (this.iToken);
  bs = v;
  } else {
  tok = this.tokAt (i);
  switch (tok) {
  case 1073742335:
  case 1073742334:
  if (!this.chk) this.vwr.setSelectionHalosEnabled (tok == 1073742335);
  tok = this.tokAt (++i);
  if (tok == 0) return;
  break;
  }
  switch (tok) {
  case 1275069441:
  case 1073742119:
  addRemove = tok;
  tok = this.tokAt (++i);
  }
  isGroup = (tok == 1086324742);
  if (isGroup) tok = this.tokAt (++i);
  bs = this.atomExpressionAt (i);
  }if (this.chk) return;
  if (this.isBondSet) {
  this.vwr.selectBonds (bs);
  } else {
  if (bs.length () > this.vwr.ms.ac) {
  var bs1 = this.vwr.getAllAtoms ();
  bs1.and (bs);
  bs = bs1;
  }this.vwr.select (bs, isGroup, addRemove, !this.doReport ());
  }}, "~N");
  Clazz.defineMethod (c$, "cmdSelectionHalos",
   function (pt) {
  var showHalo = false;
  switch (pt == this.slen ? 1073742335 : this.getToken (pt).tok) {
  case 1073742335:
  case 1113589787:
  showHalo = true;
  case 1073742334:
  case 1073742333:
  case 1073742056:
  this.setBooleanProperty ("selectionHalos", showHalo);
  break;
  default:
  this.invArg ();
  }
  }, "~N");
  Clazz.defineMethod (c$, "cmdSet",
   function () {
  if (this.slen == 1) {
  this.showString (this.vwr.getAllSettings (null));
  return;
  }var isJmolSet = (this.paramAsStr (0).equals ("set"));
  var key = this.optParameterAsString (1);
  if (isJmolSet && this.slen == 2 && key.indexOf ("?") >= 0) {
  this.showString (this.vwr.getAllSettings (key.substring (0, key.indexOf ("?"))));
  return;
  }var tok = this.getToken (1).tok;
  var newTok = 0;
  var sval;
  var ival = 2147483647;
  var b;
  var pt;
  var showing = (!this.chk && this.doReport () && !(this.st[0].value).equals ("var"));
  switch (tok) {
  case 553648147:
  case 603979866:
  case 603979903:
  case 603979924:
  case 603979960:
  case 603979962:
  case 603979964:
  case 603979965:
  case 603979970:
  if (this.$isStateScript) return;
  break;
  case 1611272194:
  this.cmdAxes (2);
  return;
  case 1610616835:
  this.cmdBackground (2);
  return;
  case 1678381065:
  this.cmdBoundbox (2);
  return;
  case 1611272202:
  this.cmdFrank (2);
  return;
  case 1610616855:
  this.cmdHistory (2);
  return;
  case 1825200146:
  this.cmdLabel (2, null);
  return;
  case 1814695966:
  this.cmdUnitcell (2);
  return;
  case 536870920:
  this.sm.loadShape (8);
  this.setShapeProperty (8, "highlight", (this.tokAt (2) == 1073742334 ? null : this.atomExpressionAt (2)));
  return;
  case 1610625028:
  case 1611141171:
  this.cmdSelectionHalos (2);
  return;
  case 536875070:
  this.cmdTimeout (2);
  return;
  case 536870932:
  var o = (this.isArrayParameter (2) ? this.floatParameterSet (2, 2, 2) : this.tokAt (2) == 2 ?  Clazz.newFloatArray (-1, [this.intParameter (2), this.intParameter (3)]) : this.stringParameter (2));
  this.checkLast (this.iToken);
  if (this.chk) return;
  if (Clazz.instanceOf (o, String)) {
  if (this.vwr.fm.loadImage (o, "\0windowImage", !this.useThreads ())) throw  new JS.ScriptInterruption (this, "windowImage", 1);
  } else {
  this.vwr.setWindowDimensions (o);
  }return;
  case 1639976963:
  var type = J.c.STR.getProteinStructureType (this.paramAsStr (2));
  if (type === J.c.STR.NOT) this.invArg ();
  var data = this.floatParameterSet (3, 0, 2147483647);
  if (data.length % 4 != 0) this.invArg ();
  this.vwr.setStructureList (data, type);
  this.checkLast (this.iToken);
  return;
  case 545259526:
  ival = this.getArgbParam (2);
  if (!this.chk) this.setObjectArgb ("axes", ival);
  return;
  case 1610612737:
  b = false;
  switch (this.getToken (this.checkLast (2)).tok) {
  case 268435552:
  break;
  case 268435536:
  b = true;
  break;
  default:
  this.invArg ();
  }
  this.setBooleanProperty ("bondModeOr", b);
  return;
  case 536870916:
  case 536870917:
  if (this.chk) return;
  var iLevel = (this.tokAt (2) == 1073742334 || this.tokAt (2) == 2 && this.intParameter (2) == 0 ? 4 : (tok == 536870917 ? 6 : 5));
  JU.Logger.setLogLevel (iLevel);
  this.setIntProperty ("logLevel", iLevel);
  if (iLevel == 4) {
  this.vwr.setDebugScript (false);
  if (showing) this.vwr.showParameter ("debugScript", true, 80);
  }this.setDebugging ();
  if (showing) this.vwr.showParameter ("logLevel", true, 80);
  return;
  case 537022465:
  this.cmdSetEcho ();
  return;
  case 1610612738:
  this.cmdFont (5, this.checkLength23 () == 2 ? 0 : this.floatParameter (2));
  return;
  case 1613238294:
  var bool = false;
  switch (this.tokAt (this.checkLast (2))) {
  case 1114249217:
  bool = true;
  case 2097178:
  this.setBooleanProperty ("hbondsBackbone", bool);
  break;
  case 1073742150:
  bool = true;
  case 1073741926:
  this.setBooleanProperty ("hbondsSolid", bool);
  break;
  default:
  this.invArg ();
  }
  return;
  case 1745489939:
  case 537006096:
  switch (tok = this.tokAt (this.checkLast (2))) {
  case 1073742335:
  case 1073742334:
  this.setBooleanProperty ("measurementlabels", tok == 1073742335);
  return;
  case 1073741926:
  case 2:
  case 3:
  this.vwr.shm.loadShape (6);
  var mad10 = this.getSetAxesTypeMad10 (2);
  if (mad10 != 2147483647) this.setShapeSizeBs (6, Clazz.doubleToInt (mad10 / 10), null);
  return;
  }
  this.setUnits (this.paramAsStr (2), 545259568);
  return;
  case 1611141176:
  b = false;
  switch (this.tokAt (this.checkLast (2))) {
  case 1114249217:
  b = true;
  break;
  case 2097178:
  break;
  default:
  this.invArg ();
  }
  this.setBooleanProperty ("ssbondsBackbone", b);
  return;
  case 1610612741:
  this.cmdSetLabel ("toggle");
  return;
  case 536870930:
  var v =  new JU.Lst ();
  for (var i = 2; i < this.slen; i++) {
  var argb = this.getArgbParam (i);
  v.addLast (Integer.$valueOf (argb));
  i = this.iToken;
  }
  if (this.chk) return;
  var n = v.size ();
  var scale =  Clazz.newIntArray (n, 0);
  for (var i = n; --i >= 0; ) scale[i] = v.get (i).intValue ();
  
  this.vwr.cm.ce.setUserScale (scale);
  return;
  case 553648188:
  if (this.isFloatParameter (2)) {
  this.checkLength (3);
  this.setIntProperty ("zSlab", Clazz.floatToInt (this.floatParameter (2)));
  pt = null;
  } else {
  if (!this.isCenterParameter (2)) this.invArg ();
  pt = this.centerParameter (2, null);
  this.checkLength (this.iToken + 1);
  }if (!this.chk) this.vwr.tm.zSlabPoint = (pt == null ? null : JU.P3.newP (pt));
  return;
  }
  var justShow = true;
  switch (tok) {
  case 536870914:
  if (this.slen > 2) {
  var modelDotted = this.getSettingStr (2, false);
  var modelNumber;
  var useModelNumber = false;
  if (modelDotted.indexOf (".") < 0) {
  modelNumber = JU.PT.parseInt (modelDotted);
  useModelNumber = true;
  } else {
  modelNumber = JS.ScriptParam.getFloatEncodedInt (modelDotted);
  }if (this.chk) return;
  var modelIndex = this.vwr.ms.getModelNumberIndex (modelNumber, useModelNumber, true);
  this.vwr.setBackgroundModelIndex (modelIndex);
  return;
  }break;
  case 1648363544:
  if (this.chk) return;
  this.vwr.setAtomProperty (this.vwr.getAllAtoms (), 1648363544, -1, NaN, null, null, null);
  if (this.slen > 2 && "probe".equalsIgnoreCase (this.getSettingStr (2, false))) {
  this.runScript ("#VDW radii for PROBE;{_H}.vdw = 1.0;{_H and connected(_C) and not connected(within(smiles,\'[a]\'))}.vdw = 1.17;{_C}.vdw = 1.75;{_C and connected(3) and connected(_O)}.vdw = 1.65;{_N}.vdw = 1.55;{_O}.vdw = 1.4;{_P}.vdw = 1.8;{_S}.vdw = 1.8;message VDW radii for H, C, N, O, P, and S set according to Word, et al., J. Mol. Biol. (1999) 285, 1711-1733");
  return;
  }newTok = 545259555;
  case 545259555:
  if (this.slen > 2) {
  sval = this.paramAsStr (2);
  if (this.slen == 3 && J.c.VDW.getVdwType (sval) == null && J.c.VDW.getVdwType (sval = this.getSettingStr (2, false)) == null) this.invArg ();
  this.setStringProperty (key, sval);
  }break;
  case 536870918:
  if (this.slen > 2) {
  var $var = this.parameterExpressionToken (2);
  if ($var.tok == 8) pt = $var.value;
   else {
  pt =  new JU.P3 ();
  var ijk = $var.asInt ();
  if (ijk >= 100) JU.SimpleUnitCell.ijkToPoint3f (ijk, pt, -1, 0);
  }if (!this.chk) this.vwr.setDefaultLattice (pt);
  }break;
  case 545259552:
  case 545259545:
  if (this.slen > 2) {
  if ((this.theTok = this.tokAt (2)) == 1073741991 || this.theTok == 1073742116) {
  sval = this.paramAsStr (this.checkLast (2));
  } else {
  sval = this.getSettingStr (2, false);
  }this.setStringProperty (key, sval);
  }break;
  case 1631586315:
  ival = this.getSettingInt (2);
  if (ival == -2147483648) this.invArg ();
  if (!this.chk) this.vwr.ms.setFormalCharges (this.vwr.bsA (), ival);
  return;
  case 545259564:
  if (this.slen > 2) this.setStringProperty (key, this.getSettingStr (2, isJmolSet));
  break;
  case 545259568:
  case 545259559:
  if (this.slen > 2) this.setUnits (this.getSettingStr (2, isJmolSet), tok);
  break;
  case 545259573:
  if (!this.chk) this.vwr.setPicked (-1, false);
  if (this.slen > 2) {
  this.cmdSetPicking ();
  return;
  }break;
  case 545259574:
  if (this.slen > 2) {
  this.cmdSetPickingStyle ();
  return;
  }break;
  case 1715472409:
  break;
  case 536870924:
  ival = this.getSettingInt (2);
  if (ival == -2147483648 || ival == 0 || ival == 1) {
  justShow = false;
  break;
  }tok = 553648174;
  key = "specularPercent";
  this.setIntProperty (key, ival);
  break;
  case 1649022989:
  tok = 553648178;
  key = "strandCount";
  this.setIntProperty (key, this.getSettingInt (2));
  break;
  default:
  justShow = false;
  }
  if (justShow && !showing) return;
  var isContextVariable = (!justShow && !isJmolSet && this.getContextVariableAsVariable (key, false) != null);
  if (!justShow && !isContextVariable) {
  switch (tok) {
  case 1677721602:
  newTok = 603979928;
  break;
  case 1612709894:
  newTok = 603979908;
  break;
  case 1612709900:
  newTok = 603979910;
  break;
  case 1610612739:
  newTok = 603979879;
  break;
  case 1665140738:
  newTok = 570425394;
  this.setFloatProperty ("solventProbeRadius", this.getSettingFloat (2));
  justShow = true;
  break;
  case 1610612740:
  newTok = 570425390;
  break;
  case 1612709912:
  newTok = 603979948;
  break;
  case 1765808134:
  newTok = 545259545;
  break;
  case 1611141175:
  sval = this.paramAsStr (2).toLowerCase ();
  switch ("x;y;z;fps;".indexOf (sval + ";")) {
  case 0:
  newTok = 570425398;
  break;
  case 2:
  newTok = 570425400;
  break;
  case 4:
  newTok = 570425402;
  break;
  case 6:
  newTok = 570425396;
  break;
  default:
  this.errorStr2 (50, "set SPIN ", sval);
  }
  if (!this.chk) this.vwr.setSpin (sval, Clazz.floatToInt (this.floatParameter (this.checkLast (3))));
  justShow = true;
  break;
  }
  }if (newTok != 0) {
  key = JS.T.nameOf (tok = newTok);
  } else if (!justShow && !isContextVariable) {
  if (key.length == 0 || key.charAt (0) == '_' && this.tokAt (2) != 268435520) this.error (56);
  var lckey = key.toLowerCase ();
  if (lckey.indexOf ("label") == 0 && JU.PT.isOneOf (lckey.substring (5), ";front;group;atom;offset;offsetexact;offsetabsolute;pointer;alignment;toggle;scalereference;for;")) {
  if (this.cmdSetLabel (lckey.substring (5))) return;
  }if (isJmolSet && lckey.indexOf ("shift_") == 0) {
  var f = this.floatParameter (2);
  this.checkLength (3);
  if (!this.chk) this.vwr.getNMRCalculation ().setChemicalShiftReference (lckey.substring (6), f);
  return;
  }if (lckey.endsWith ("callback")) tok = 536870912;
  }if (isJmolSet && !JS.T.tokAttr (tok, 536870912)) {
  this.iToken = 1;
  if (!this.$isStateScript) this.errorStr2 (50, "SET", key);
  this.warning (51, "SET", key);
  }if (!justShow && isJmolSet) {
  switch (this.slen) {
  case 2:
  this.setBooleanProperty (key, true);
  justShow = true;
  break;
  case 3:
  if (ival != 2147483647) {
  this.setIntProperty (key, ival);
  justShow = true;
  }break;
  }
  }if (!justShow && !isJmolSet && this.tokAt (2) == 1073742333) {
  if (!this.chk) this.vwr.removeUserVariable (key.toLowerCase ());
  justShow = true;
  }if (!justShow) {
  this.setVariable (1, 0, key, true);
  if (!isJmolSet) return;
  }if (showing) this.vwr.showParameter (key, true, 80);
  });
  Clazz.defineMethod (c$, "cmdSetEcho",
   function () {
  var propertyName = null;
  var propertyValue = null;
  var id = null;
  var echoShapeActive = true;
  var pt = 2;
  switch (this.getToken (2).tok) {
  case 1073742334:
  id = propertyName = "allOff";
  this.checkLength (++pt);
  break;
  case 1073742333:
  echoShapeActive = false;
  case 1073742327:
  id = this.paramAsStr (2);
  this.checkLength (++pt);
  break;
  case 1073741996:
  case 12289:
  case 1073742126:
  case 1073742172:
  case 1073742019:
  case 1073741871:
  case 1073741824:
  case 4:
  case 1073741974:
  if (this.theTok == 1073741974) pt++;
  id = this.paramAsStr (pt++);
  break;
  }
  if (!this.chk) {
  this.vwr.ms.setEchoStateActive (echoShapeActive);
  this.sm.loadShape (31);
  if (id != null) this.setShapeProperty (31, propertyName == null ? "target" : propertyName, id);
  }if (pt < this.slen) {
  switch (this.getToken (pt++).tok) {
  case 1073741832:
  propertyName = "align";
  switch (this.getToken (pt).tok) {
  case 1073741996:
  case 1073742126:
  case 12289:
  propertyValue = this.paramAsStr (pt++);
  break;
  default:
  this.invArg ();
  }
  break;
  case 12289:
  case 1073741996:
  case 1073742126:
  propertyName = "align";
  propertyValue = this.paramAsStr (pt - 1);
  break;
  case 554176526:
  propertyName = "%zpos";
  propertyValue = Integer.$valueOf (Clazz.floatToInt (this.floatParameter (pt++)));
  break;
  case 1610625028:
  case 2097192:
  case 1073742335:
  propertyName = "hidden";
  propertyValue = Boolean.FALSE;
  break;
  case 12294:
  case 2097194:
  propertyName = "hidden";
  propertyValue = Boolean.TRUE;
  break;
  case 1094717454:
  var modelIndex = (this.chk ? 0 : this.modelNumberParameter (pt++));
  if (modelIndex >= this.vwr.ms.mc) this.invArg ();
  propertyName = "model";
  propertyValue = Integer.$valueOf (modelIndex);
  break;
  case 268435520:
  case 1073742195:
  propertyName = "xypos";
  propertyValue = this.xypParameter (--pt);
  if (propertyValue == null) this.invArg ();
  pt = this.iToken + 1;
  break;
  case 2:
  var posx = this.intParameter (pt - 1);
  var namex = "xpos";
  if (this.tokAt (pt) == 268435634) {
  namex = "%xpos";
  pt++;
  }propertyName = "ypos";
  propertyValue = Integer.$valueOf (this.intParameter (pt++));
  if (this.tokAt (pt) == 268435634) {
  propertyName = "%ypos";
  pt++;
  }this.checkLength (pt);
  this.setShapeProperty (31, namex, Integer.$valueOf (posx));
  break;
  case 1073742066:
  propertyName = "offset";
  if (this.isPoint3f (pt)) {
  var pt3 = this.getPoint3f (pt, false);
  propertyValue =  Clazz.newFloatArray (-1, [-1, pt3.x, pt3.y, pt3.z, 0, 0, 0]);
  pt = this.iToken + 1;
  } else if (this.isArrayParameter (pt)) {
  propertyValue = this.floatParameterSet (pt, 7, 7);
  pt = this.iToken + 1;
  }break;
  case 1073742334:
  propertyName = "off";
  break;
  case 1073742138:
  propertyName = "scale";
  propertyValue = Float.$valueOf (this.floatParameter (pt++));
  break;
  case 134222850:
  propertyName = "script";
  propertyValue = this.paramAsStr (pt++);
  break;
  case 4120:
  pt++;
  case 4:
  var isImage = (this.theTok != 4);
  this.checkLength (pt--);
  if (isImage) {
  if (id == null) {
  var data =  new Array (1);
  this.getShapePropertyData (31, "currentTarget", data);
  id = data[0];
  }if (!this.chk && this.vwr.ms.getEchoStateActive () && this.vwr.fm.loadImage (this.getToken (pt).value, id, !this.useThreads ())) throw  new JS.ScriptInterruption (this, "setEchoImage", 1);
  return;
  }this.cmdEcho (pt);
  return;
  case 134217751:
  propertyName = "point";
  propertyValue = (this.isCenterParameter (pt) ? this.centerParameter (pt, null) : null);
  pt = this.iToken + 1;
  break;
  default:
  if (this.isCenterParameter (pt - 1)) {
  propertyName = "xyz";
  propertyValue = this.centerParameter (pt - 1, null);
  pt = this.iToken + 1;
  break;
  }this.invArg ();
  }
  }this.checkLength (pt);
  if (!this.chk && propertyName != null) this.setShapeProperty (31, propertyName, propertyValue);
  });
  Clazz.defineMethod (c$, "cmdSetLabel",
   function (str) {
  this.sm.loadShape (5);
  var propertyValue = null;
  this.setShapeProperty (5, "setDefaults", this.vwr.slm.noneSelected);
  while (true) {
  if (str.equals ("for")) {
  var bs = this.atomExpressionAt (2);
  this.cmdLabel (this.iToken + 1, bs);
  return true;
  }if (str.equals ("scalereference")) {
  var scaleAngstromsPerPixel = this.floatParameter (2);
  if (scaleAngstromsPerPixel >= 5) scaleAngstromsPerPixel = this.vwr.tm.getZoomSetting () / scaleAngstromsPerPixel / this.vwr.getScalePixelsPerAngstrom (false);
  propertyValue = Float.$valueOf (scaleAngstromsPerPixel);
  break;
  }var isAbsolute = false;
  if (str.equals ("offset") || (isAbsolute = (str.equals ("offsetabsolute") || str.equals ("offsetexact")))) {
  str = "offset";
  if (this.isPoint3f (2)) {
  var pt = this.getPoint3f (2, false);
  propertyValue =  Clazz.newFloatArray (-1, [-1, pt.x, pt.y, pt.z, 0, 0, 0]);
  } else if (this.isArrayParameter (2)) {
  propertyValue = this.floatParameterSet (2, 7, 7);
  } else {
  var xOffset = this.intParameterRange (2, -500, 500);
  var yOffset = this.intParameterRange (3, -500, 500);
  if (xOffset == 2147483647 || yOffset == 2147483647) return true;
  propertyValue = Integer.$valueOf (JV.JC.getOffset (xOffset, yOffset, isAbsolute));
  }break;
  }if (str.equals ("alignment")) {
  switch (this.getToken (2).tok) {
  case 1073741996:
  case 1073742126:
  case 12289:
  str = "align";
  propertyValue = this.theToken.value;
  break;
  default:
  this.invArg ();
  }
  break;
  }if (str.equals ("pointer")) {
  var flags = 0;
  switch (this.getToken (2).tok) {
  case 1073742334:
  case 1073742333:
  break;
  case 1610616835:
  flags |= 2;
  case 1073742335:
  flags |= 1;
  break;
  default:
  this.invArg ();
  }
  propertyValue = Integer.$valueOf (flags);
  break;
  }if (str.equals ("toggle")) {
  this.iToken = 1;
  var bs = (this.slen == 2 ? this.vwr.bsA () : this.atomExpressionAt (2));
  this.checkLast (this.iToken);
  if (this.chk) return true;
  this.vwr.shm.loadShape (5);
  this.vwr.shm.setShapePropertyBs (5, "toggleLabel", null, bs);
  return true;
  }this.iToken = 1;
  var TF = (this.slen == 2 || this.getToken (2).tok == 1073742335);
  if (str.equals ("front") || str.equals ("group")) {
  if (!TF && this.tokAt (2) != 1073742334) this.invArg ();
  if (!TF) str = "front";
  propertyValue = (TF ? Boolean.TRUE : Boolean.FALSE);
  break;
  }if (str.equals ("atom")) {
  if (!TF && this.tokAt (2) != 1073742334) this.invArg ();
  str = "front";
  propertyValue = (TF ? Boolean.FALSE : Boolean.TRUE);
  break;
  }return false;
  }
  var bs = (this.iToken + 1 < this.slen ? this.atomExpressionAt (++this.iToken) : null);
  this.checkLast (this.iToken);
  if (this.chk) return true;
  if (bs == null) this.setShapeProperty (5, str, propertyValue);
   else this.setShapePropertyBs (5, str, propertyValue, bs);
  return true;
  }, "~S");
  Clazz.defineMethod (c$, "cmdSetPicking",
   function () {
  if (this.slen == 2) {
  this.setStringProperty ("picking", "identify");
  return;
  }if (this.slen > 4 || this.tokAt (2) == 4) {
  this.setStringProperty ("picking", this.getSettingStr (2, false));
  return;
  }var i = 2;
  var type = "SELECT";
  switch (this.getToken (2).tok) {
  case 1275082245:
  case 1745489939:
  case 1611141175:
  if (this.checkLength34 () == 4) {
  type = this.paramAsStr (2).toUpperCase ();
  if (type.equals ("SPIN")) this.setIntProperty ("pickingSpinRate", this.intParameter (3));
   else i = 3;
  }break;
  case 12291:
  break;
  default:
  this.checkLength (3);
  }
  var str = this.paramAsStr (i);
  switch (this.getToken (i).tok) {
  case 1073742335:
  case 1073742056:
  str = "identify";
  break;
  case 1073742334:
  case 1073742333:
  str = "off";
  break;
  case 1275082245:
  str = "atom";
  break;
  case 1825200146:
  str = "label";
  break;
  case 1677721602:
  str = "bond";
  break;
  case 12291:
  this.checkLength (4);
  if (this.tokAt (3) != 1677721602) this.invArg ();
  str = "deleteBond";
  break;
  }
  var mode = ((mode = str.indexOf ("_")) >= 0 ? mode : str.length);
  mode = JV.ActionManager.getPickingMode (str.substring (0, mode));
  if (mode < 0) this.errorStr2 (50, "SET PICKING " + type, str);
  this.setStringProperty ("picking", str);
  });
  Clazz.defineMethod (c$, "cmdSetPickingStyle",
   function () {
  if (this.slen > 4 || this.tokAt (2) == 4) {
  this.setStringProperty ("pickingStyle", this.getSettingStr (2, false));
  return;
  }var i = 2;
  var isMeasure = false;
  var type = "SELECT";
  switch (this.getToken (2).tok) {
  case 1745489939:
  isMeasure = true;
  type = "MEASURE";
  case 1275082245:
  if (this.checkLength34 () == 4) i = 3;
  break;
  default:
  this.checkLength (3);
  }
  var str = this.paramAsStr (i);
  switch (this.getToken (i).tok) {
  case 1073742333:
  case 1073742334:
  str = (isMeasure ? "measureoff" : "toggle");
  break;
  case 1073742335:
  if (isMeasure) str = "measure";
  break;
  }
  if (JV.ActionManager.getPickingStyleIndex (str) < 0) this.errorStr2 (50, "SET PICKINGSTYLE " + type, str);
  this.setStringProperty ("pickingStyle", str);
  });
  Clazz.defineMethod (c$, "cmdSlab",
   function (isDepth) {
  var TF = false;
  var plane = null;
  var str;
  if (this.isCenterParameter (1) || this.tokAt (1) == 9) plane = this.planeParameter (1);
   else switch (this.getToken (1).tok) {
  case 2:
  var percent = this.intParameter (this.checkLast (1));
  if (!this.chk) if (isDepth) this.vwr.tm.depthToPercent (percent);
   else this.vwr.tm.slabToPercent (percent);
  return;
  case 1073742335:
  TF = true;
  case 1073742334:
  this.checkLength (2);
  this.setBooleanProperty ("slabEnabled", TF);
  return;
  case 4141:
  this.checkLength (2);
  if (this.chk) return;
  this.vwr.tm.slabReset ();
  this.setBooleanProperty ("slabEnabled", true);
  return;
  case 36867:
  this.checkLength (2);
  if (!this.chk) this.vwr.tm.setSlabDepthInternal (isDepth);
  return;
  case 268435616:
  str = this.paramAsStr (2);
  if (str.equalsIgnoreCase ("hkl")) plane = this.hklParameter (3);
   else if (str.equalsIgnoreCase ("plane")) plane = this.planeParameter (2);
  if (plane == null) this.invArg ();
  plane.scale4 (-1);
  break;
  case 134217750:
  switch (this.getToken (2).tok) {
  case 1073742333:
  break;
  default:
  plane = this.planeParameter (1);
  }
  break;
  case 134219265:
  plane = (this.getToken (2).tok == 1073742333 ? null : this.hklParameter (2));
  break;
  case 1073742118:
  return;
  default:
  this.invArg ();
  }
  if (!this.chk) this.vwr.tm.slabInternal (plane, isDepth);
  }, "~B");
  Clazz.defineMethod (c$, "cmdSsbond",
   function () {
  var mad = this.getMadParameter ();
  if (mad == 2147483647) return;
  this.setShapeProperty (1, "type", Integer.$valueOf (256));
  this.setShapeSizeBs (1, mad, null);
  this.setShapeProperty (1, "type", Integer.$valueOf (1023));
  });
  Clazz.defineMethod (c$, "cmdStructure",
   function () {
  var type = J.c.STR.getProteinStructureType (this.paramAsStr (1));
  if (type === J.c.STR.NOT) this.invArg ();
  var bs = null;
  switch (this.tokAt (2)) {
  case 12290:
  case 10:
  case 1073742325:
  bs = this.atomExpressionAt (2);
  this.checkLast (this.iToken);
  break;
  default:
  this.checkLength (2);
  }
  if (this.chk) return;
  this.clearDefinedVariableAtomSets ();
  this.vwr.setProteinType (type, bs);
  });
  Clazz.defineMethod (c$, "cmdSubset",
   function () {
  var bs = null;
  if (!this.chk) this.vwr.slm.setSelectionSubset (null);
  if (this.slen != 1 && (this.slen != 4 || !this.getToken (2).value.equals ("off"))) bs = this.atomExpressionAt (1);
  if (!this.chk) this.vwr.slm.setSelectionSubset (bs);
  });
  Clazz.defineMethod (c$, "cmdSync",
   function () {
  var text = "";
  var applet = "";
  var port = JU.PT.parseInt (this.optParameterAsString (1));
  if (port == -2147483648) {
  this.checkLength (-3);
  port = 0;
  switch (this.slen) {
  case 1:
  applet = "*";
  text = "ON";
  break;
  case 2:
  applet = this.paramAsStr (1);
  if (applet.indexOf ("jmolApplet") == 0 || JU.PT.isOneOf (applet, ";*;.;^;")) {
  text = "ON";
  if (!this.chk) this.vwr.syncScript (text, applet, 0);
  applet = ".";
  break;
  }text = applet;
  applet = "*";
  break;
  case 3:
  applet = this.paramAsStr (1);
  text = (this.tokAt (2) == 528443 ? "GET_GRAPHICS" : this.paramAsStr (2));
  break;
  }
  } else {
  var v = null;
  if (this.slen > 2 && (v = this.setVariable (2, -1, "", false)) == null) return;
  text = (this.slen == 2 ? null : v.tok == 6 ? v.toJSON () : v.asString ());
  applet = null;
  }if (this.chk) return;
  this.vwr.syncScript (text, applet, port);
  });
  Clazz.defineMethod (c$, "cmdThrow",
   function () {
  if (this.chk) return;
  var pt = (this.tokAt (1) == 14 ? 2 : 1);
  var v = (pt == 1 ? this.setVariable (1, this.slen, "thrown_value", false) : this.vwr.g.setUserVariable ("thrown_value", JS.SV.newS (this.optParameterAsString (2))));
  var info = v.asString ();
  if (info.length == 0 && (info = this.optParameterAsString (1)).length == 0) info = "context";
  if (pt == 2) {
  this.saveContext (info);
  if (this.doReport ()) this.report (J.i18n.GT.o (J.i18n.GT._ ("to resume, enter: &{0}"), info), false);
  throw  new JS.ScriptInterruption (this, info, -2147483648);
  }this.evalError (info, null);
  });
  Clazz.defineMethod (c$, "saveContext",
   function (saveName) {
  var sc = this.getScriptContext ("Context_" + saveName);
  this.vwr.stm.saveContext (saveName, sc);
  this.vwr.g.setUserVariable (saveName, JS.SV.newV (14, sc));
  return sc;
  }, "~S");
  Clazz.defineMethod (c$, "cmdTimeout",
   function (index) {
  var name = null;
  var script = null;
  var mSec = 0;
  if (this.slen == index) {
  this.showString (this.vwr.showTimeout (null));
  return;
  }for (var i = index; i < this.slen; i++) switch (this.getToken (i).tok) {
  case 1073741974:
  name = this.paramAsStr (++i);
  if (this.slen == 3) {
  if (!this.chk) this.vwr.triggerTimeout (name);
  return;
  }break;
  case 1073742334:
  break;
  case 2:
  mSec = this.intParameter (i);
  break;
  case 3:
  mSec = Math.round (this.floatParameter (i) * 1000);
  break;
  default:
  if (name == null) name = this.paramAsStr (i);
   else if (script == null) script = this.paramAsStr (i);
   else this.invArg ();
  break;
  }
  
  if (!this.chk) this.vwr.setTimeout (name, mSec, script);
  }, "~N");
  Clazz.defineMethod (c$, "cmdTranslate",
   function (isSelected) {
  var bs = null;
  var i = 1;
  var i0 = 0;
  if (this.tokAt (1) == 1113589787) {
  isSelected = true;
  i0 = 1;
  i = 2;
  }if (this.isPoint3f (i)) {
  var pt = this.getPoint3f (i, true);
  bs = (this.iToken + 1 < this.slen ? this.atomExpressionAt (++this.iToken) : null);
  this.checkLast (this.iToken);
  if (!this.chk) this.vwr.setAtomCoordsRelative (pt, bs);
  return;
  }var xyz = (this.paramAsStr (i).toLowerCase () + " ").charAt (0);
  if ("xyz".indexOf (xyz) < 0) this.error (0);
  var amount = this.floatParameter (++i);
  var type;
  switch (this.tokAt (++i)) {
  case 0:
  case 12290:
  case 10:
  case 1073742325:
  type = '\0';
  break;
  default:
  type = (this.optParameterAsString (i).toLowerCase () + '\0').charAt (0);
  }
  if (amount == 0 && type != '\0') return;
  this.iToken = i0 + (type == '\0' ? 2 : 3);
  bs = (isSelected ? this.vwr.bsA () : this.iToken + 1 < this.slen ? this.atomExpressionAt (++this.iToken) : null);
  this.checkLast (this.iToken);
  if (!this.chk) this.vwr.translate (xyz, amount, type, bs);
  }, "~B");
  Clazz.defineMethod (c$, "cmdUnbind",
   function () {
  if (this.slen != 1) this.checkLength23 ();
  var mouseAction = this.optParameterAsString (1);
  var name = this.optParameterAsString (2);
  if (mouseAction.length == 0 || this.tokAt (1) == 1073742327) mouseAction = null;
  if (name.length == 0 || this.tokAt (2) == 1073742327) name = null;
  if (name == null && mouseAction != null && JV.ActionManager.getActionFromName (mouseAction) >= 0) {
  name = mouseAction;
  mouseAction = null;
  }if (!this.chk) this.vwr.unBindAction (mouseAction, name);
  });
  Clazz.defineMethod (c$, "cmdUndoRedoMove",
   function () {
  var n = 1;
  var len = 2;
  switch (this.tokAt (1)) {
  case 0:
  len = 1;
  break;
  case 1073742327:
  n = 0;
  break;
  case 2:
  n = this.intParameter (1);
  break;
  default:
  this.invArg ();
  }
  this.checkLength (len);
  if (!this.chk) this.vwr.undoMoveAction (this.tokAt (0), n);
  });
  Clazz.defineMethod (c$, "setCurrentCagePts",
  function (originABC, name) {
  var sym = J.api.Interface.getSymmetry (this.vwr, "eval");
  if (sym == null && this.vwr.async) throw  new NullPointerException ();
  try {
  this.vwr.ms.setModelCage (this.vwr.am.cmi, originABC == null ? null : sym.getUnitCell (originABC, false, name));
  } catch (e) {
  if (Clazz.exceptionOf (e, Exception)) {
  } else {
  throw e;
  }
  }
  }, "~A,~S");
  Clazz.defineMethod (c$, "cmdUnitcell",
   function (i) {
  this.getCmdExt ().dispatch (1814695966, i == 2, null);
  }, "~N");
  Clazz.defineMethod (c$, "cmdVector",
   function () {
  var type = J.atomdata.RadiusData.EnumType.SCREEN;
  var value = 1;
  this.checkLength (-3);
  switch (this.iToken = this.slen) {
  case 1:
  break;
  case 2:
  switch (this.getToken (1).tok) {
  case 1073742335:
  break;
  case 1073742334:
  value = 0;
  break;
  case 2:
  var d = this.intParameterRange (1, 0, 19);
  if (d == 2147483647) return;
  value = d;
  break;
  case 3:
  type = J.atomdata.RadiusData.EnumType.ABSOLUTE;
  if (Float.isNaN (value = this.floatParameterRange (1, 0, 3))) return;
  break;
  default:
  this.error (6);
  }
  break;
  case 3:
  switch (this.tokAt (1)) {
  case 1112152078:
  this.setIntProperty ("vectorTrace", this.intParameterRange (2, 0, 20));
  return;
  case 1073742138:
  if (!Float.isNaN (value = this.floatParameterRange (2, -100, 100))) this.setFloatProperty ("vectorScale", value);
  return;
  case 64:
  var max = this.floatParameter (2);
  if (!this.chk) this.vwr.ms.scaleVectorsToMax (max);
  return;
  }
  break;
  }
  this.setShapeSize (18,  new J.atomdata.RadiusData (null, value, type, null));
  });
  Clazz.defineMethod (c$, "cmdVibration",
   function () {
  this.checkLength (-3);
  var period = 0;
  switch (this.getToken (1).tok) {
  case 1073742335:
  this.checkLength (2);
  period = this.vwr.getFloat (570425412);
  break;
  case 1073742334:
  this.checkLength (2);
  period = 0;
  break;
  case 2:
  case 3:
  this.checkLength (2);
  period = this.floatParameter (1);
  break;
  case 1073742138:
  if (!Float.isNaN (period = this.floatParameterRange (2, -100, 100))) this.setFloatProperty ("vibrationScale", period);
  return;
  case 64:
  var max = this.floatParameter (2);
  if (!this.chk) this.vwr.ms.scaleVectorsToMax (max);
  break;
  case 1073742090:
  this.setFloatProperty ("vibrationPeriod", this.floatParameter (2));
  return;
  case 1073741824:
  this.invArg ();
  break;
  default:
  period = -1;
  }
  if (period < 0) this.invArg ();
  if (this.chk) return;
  if (period == 0) {
  this.vwr.tm.setVibrationPeriod (0);
  return;
  }this.vwr.setVibrationPeriod (-period);
  });
  Clazz.defineMethod (c$, "cmdWireframe",
   function () {
  var mad = -2147483648;
  if (this.tokAt (1) == 4141) this.checkLast (1);
   else mad = this.getMadParameter ();
  if (this.chk || mad == 2147483647) return;
  this.setShapeProperty (1, "type", Integer.$valueOf (1023));
  this.setShapeSizeBs (1, mad == -2147483648 ? 300 : mad, null);
  });
  Clazz.defineMethod (c$, "cmdZap",
   function (isZapCommand) {
  if (this.slen == 1 || !isZapCommand) {
  var doAll = (isZapCommand && !this.$isStateScript);
  if (doAll) this.vwr.cacheFileByName (null, false);
  this.vwr.zap (true, doAll, true);
  this.refresh (false);
  return;
  }var bs = this.atomExpressionAt (1);
  if (this.chk) return;
  if (bs.nextSetBit (0) < 0 && this.slen == 4 && this.tokAt (2) == 1073742359) {
  var iModel = this.vwr.ms.getModelNumberIndex (this.getToken (2).intValue, false, true);
  if (iModel >= 0) this.vwr.deleteModels (iModel, null);
  return;
  }var nDeleted = this.vwr.deleteAtoms (bs, true);
  var isQuiet = !this.doReport ();
  if (!isQuiet) this.report (J.i18n.GT.i (J.i18n.GT._ ("{0} atoms deleted"), nDeleted), false);
  this.vwr.select (null, false, 0, isQuiet);
  }, "~B");
  Clazz.defineMethod (c$, "cmdZoom",
   function (isZoomTo) {
  if (!isZoomTo) {
  var tok = (this.slen > 1 ? this.getToken (1).tok : 1073742335);
  switch (tok) {
  case 1275068432:
  case 1073742079:
  break;
  case 1073742335:
  case 1073742334:
  if (this.slen > 2) this.bad ();
  if (!this.chk) this.setBooleanProperty ("zoomEnabled", tok == 1073742335);
  return;
  }
  }var center = null;
  var i = 1;
  var floatSecondsTotal = (isZoomTo ? (this.isFloatParameter (i) ? this.floatParameter (i++) : 1) : 0);
  if (floatSecondsTotal < 0) {
  i--;
  floatSecondsTotal = 0;
  }var ptCenter = 0;
  var bsCenter = null;
  if (this.isCenterParameter (i)) {
  ptCenter = i;
  var ret =  new Array (1);
  center = this.centerParameter (i, ret);
  if (Clazz.instanceOf (ret[0], JU.BS)) bsCenter = ret[0];
  i = this.iToken + 1;
  } else if (this.tokAt (i) == 2 && this.getToken (i).intValue == 0) {
  bsCenter = this.vwr.getAtomBitSet ("visible");
  center = this.vwr.ms.getAtomSetCenter (bsCenter);
  }var isSameAtom = false;
  var zoom = this.vwr.tm.getZoomSetting ();
  var newZoom = this.getZoom (ptCenter, i, bsCenter, zoom);
  i = this.iToken + 1;
  var xTrans = NaN;
  var yTrans = NaN;
  if (i != this.slen) {
  xTrans = this.floatParameter (i++);
  yTrans = this.floatParameter (i++);
  }if (i != this.slen) this.invArg ();
  if (newZoom < 0) {
  newZoom = -newZoom;
  if (isZoomTo) {
  if (this.slen == 1 || isSameAtom) newZoom *= 2;
   else if (center == null) newZoom /= 2;
  }}var max = 200000;
  if (newZoom < 5 || newZoom > max) this.numberOutOfRange (5, max);
  if (!this.vwr.tm.isWindowCentered ()) {
  if (center != null) {
  var bs = this.atomExpressionAt (ptCenter);
  if (!this.chk) this.vwr.setCenterBitSet (bs, false);
  }center = this.vwr.tm.fixedRotationCenter;
  if (Float.isNaN (xTrans)) xTrans = this.vwr.tm.getTranslationXPercent ();
  if (Float.isNaN (yTrans)) yTrans = this.vwr.tm.getTranslationYPercent ();
  }if (this.chk) return;
  if (Float.isNaN (xTrans)) xTrans = 0;
  if (Float.isNaN (yTrans)) yTrans = 0;
  if (isSameAtom && Math.abs (zoom - newZoom) < 1 || !this.useThreads ()) floatSecondsTotal = 0;
  this.vwr.moveTo (this, floatSecondsTotal, center, JV.JC.center, NaN, null, newZoom, xTrans, yTrans, NaN, null, NaN, NaN, NaN, NaN, NaN, NaN);
  if (this.isJS && floatSecondsTotal > 0 && this.vwr.g.waitForMoveTo) throw  new JS.ScriptInterruption (this, "zoomTo", 1);
  }, "~B");
  Clazz.defineMethod (c$, "colorShape",
   function (shapeType, index, isBackground) {
  var translucency = null;
  var colorvalue = null;
  var colorvalue1 = null;
  var bs = null;
  var prefix = (index == 2 && this.tokAt (1) == 1073741859 ? "ball" : "");
  var isColor = false;
  var isIsosurface = (shapeType == 24 || shapeType == 25);
  var typeMask = 0;
  var doClearBondSet = false;
  var translucentLevel = 3.4028235E38;
  if (index < 0) {
  bs = this.atomExpressionAt (-index);
  index = this.iToken + 1;
  if (this.isBondSet) {
  doClearBondSet = true;
  shapeType = 1;
  }}var tok = this.getToken (index).tok;
  if (isBackground) this.getToken (index);
   else if ((isBackground = (tok == 1610616835)) == true) this.getToken (++index);
  if (isBackground) prefix = "bg";
   else if (isIsosurface) {
  switch (this.theTok) {
  case 1073742018:
  this.getToken (++index);
  prefix = "mesh";
  break;
  case 1073742094:
  var argb = this.getArgbParamOrNone (++index, false);
  colorvalue1 = (argb == 0 ? null : Integer.$valueOf (argb));
  this.getToken (index = this.iToken + 1);
  break;
  case 12290:
  case 10:
  case 1073742325:
  if (Clazz.instanceOf (this.theToken.value, JM.BondSet)) {
  bs = this.theToken.value;
  prefix = "vertex";
  } else {
  bs = this.atomExpressionAt (index);
  prefix = "atom";
  }this.getToken (index = this.iToken + 1);
  break;
  }
  }if (!this.chk && (shapeType == 27 || shapeType == 28) && this.getIsoExt ().dispatch (shapeType, true, this.st) != null) return;
  var isTranslucent = (this.theTok == 603979967);
  if (isTranslucent || this.theTok == 1073742074) {
  if (translucentLevel == 1.4E-45) this.invArg ();
  translucency = this.paramAsStr (index++);
  if (isTranslucent && this.isFloatParameter (index)) translucentLevel = this.getTranslucentLevel (index++);
  }tok = 0;
  if (index < this.slen && this.tokAt (index) != 1073742335 && this.tokAt (index) != 1073742334) {
  isColor = true;
  tok = this.getToken (index).tok;
  if ((!isIsosurface || this.tokAt (index + 1) != 1073742170) && this.isColorParam (index)) {
  var argb = this.getArgbParamOrNone (index, false);
  colorvalue = (argb == 0 ? null : Integer.$valueOf (argb));
  if (this.tokAt (index = this.iToken + 1) != 0 && translucency == null) {
  this.getToken (index);
  isTranslucent = (this.theTok == 603979967);
  if (isTranslucent || this.theTok == 1073742074) {
  translucency = this.paramAsStr (index++);
  if (isTranslucent && this.isFloatParameter (index)) translucentLevel = this.getTranslucentLevel (index++);
  }}if (this.isColorParam (index)) {
  argb = this.getArgbParamOrNone (index, false);
  colorvalue1 = (argb == 0 ? null : Integer.$valueOf (argb));
  index = this.iToken + 1;
  }this.checkLength (index);
  } else if (shapeType == 26) {
  this.iToken--;
  } else {
  var name = this.paramAsStr (index).toLowerCase ();
  var isByElement = (name.indexOf ("byelement") == 0);
  var isColorIndex = (isByElement || name.indexOf ("byresidue") == 0);
  var pal = (isColorIndex || isIsosurface ? J.c.PAL.PROPERTY : tok == 1112152075 ? J.c.PAL.CPK : J.c.PAL.getPalette (name));
  if (pal === J.c.PAL.UNKNOWN || (pal === J.c.PAL.TYPE || pal === J.c.PAL.ENERGY) && shapeType != 2) this.invArg ();
  var data = null;
  var bsSelected = (pal !== J.c.PAL.PROPERTY && pal !== J.c.PAL.VARIABLE || !this.vwr.g.rangeSelected ? null : this.vwr.bsA ());
  if (pal === J.c.PAL.PROPERTY) {
  if (isColorIndex) {
  if (!this.chk) {
  data = this.getCmdExt ().getBitsetPropertyFloat (bsSelected, (isByElement ? 1094715402 : 1094713356) | 256, null, NaN, NaN);
  }} else {
  var isPropertyExplicit = name.equals ("property");
  if (isPropertyExplicit && JS.T.tokAttr ((tok = this.getToken (++index).tok), 1077936128) && !JS.T.tokAttr (tok, 1086324736)) {
  tok = this.getToken (index).tok;
  var type = (tok == 1111490587 ? this.getToken (++index).value.toString () : null);
  if (!this.chk) {
  data = this.getCmdExt ().getBitsetPropertyFloat (bsSelected, tok | 256, type, NaN, NaN);
  }index++;
  } else if (!isPropertyExplicit && !isIsosurface) {
  index++;
  }}} else if (pal === J.c.PAL.VARIABLE) {
  index++;
  name = this.paramAsStr (index++);
  data =  Clazz.newFloatArray (this.vwr.ms.ac, 0);
  JU.Parser.parseStringInfestedFloatArray ("" + this.getParameter (name, 4, true), null, data);
  pal = J.c.PAL.PROPERTY;
  }if (pal === J.c.PAL.PROPERTY) {
  var scheme = null;
  if (this.tokAt (index) == 4) {
  scheme = this.paramAsStr (index++).toLowerCase ();
  if (this.isArrayParameter (index)) {
  scheme += "=" + JS.SV.sValue (JS.SV.getVariableAS (this.stringParameterSet (index))).$replace ('\n', ' ');
  index = this.iToken + 1;
  }} else if (isIsosurface && this.isColorParam (index)) {
  scheme = this.getColorRange (index);
  index = this.iToken + 1;
  }if (scheme != null && !isIsosurface) {
  this.setStringProperty ("propertyColorScheme", (isTranslucent && translucentLevel == 3.4028235E38 ? "translucent " : "") + scheme);
  isColorIndex = (scheme.indexOf ("byelement") == 0 || scheme.indexOf ("byresidue") == 0);
  }var min = 0;
  var max = 3.4028235E38;
  if (!isColorIndex && (this.tokAt (index) == 1073741826 || this.tokAt (index) == 1073742114)) {
  min = this.floatParameter (index + 1);
  max = this.floatParameter (index + 2);
  index += 3;
  if (min == max && isIsosurface) {
  var range = this.getShapeProperty (shapeType, "dataRange");
  if (range != null) {
  min = range[0];
  max = range[1];
  }} else if (min == max) {
  max = 3.4028235E38;
  }}if (isIsosurface) {
  } else if (data == null) {
  if (!this.chk) this.vwr.setCurrentColorRange (name);
  } else {
  if (!this.chk) this.vwr.cm.setPropertyColorRangeData (data, bsSelected);
  }if (isIsosurface) {
  this.checkLength (index);
  if (this.chk) return;
  isColor = false;
  var ce = (scheme == null ? this.getShapeProperty (shapeType, "colorEncoder") : null);
  if (ce == null && (ce = this.vwr.cm.getColorEncoder (scheme)) == null) return;
  ce.isTranslucent = (isTranslucent && translucentLevel == 3.4028235E38);
  ce.setRange (min, max, min > max);
  if (max == 3.4028235E38) ce.hi = max;
  this.setShapeProperty (shapeType, "remapColor", ce);
  this.showString ((this.getShapeProperty (shapeType, "dataRangeStr")).$replace ('\n', ' '));
  if (translucentLevel == 3.4028235E38) return;
  } else if (max != 3.4028235E38) {
  this.vwr.cm.setPropertyColorRange (min, max);
  }} else {
  index++;
  }this.checkLength (index);
  colorvalue = pal;
  }}if (this.chk || shapeType < 0) return;
  switch (shapeType) {
  case 4:
  typeMask = 32768;
  break;
  case 2:
  typeMask = 30720;
  break;
  case 3:
  typeMask = 256;
  break;
  case 1:
  typeMask = 1023;
  break;
  default:
  typeMask = 0;
  }
  if (typeMask == 0) {
  this.sm.loadShape (shapeType);
  if (shapeType == 5) this.setShapeProperty (5, "setDefaults", this.vwr.slm.noneSelected);
  } else {
  if (bs != null) {
  this.vwr.selectBonds (bs);
  bs = null;
  }shapeType = 1;
  this.setShapeProperty (shapeType, "type", Integer.$valueOf (typeMask));
  }if (isColor) {
  switch (tok) {
  case 1111492619:
  this.getPartialCharges (bs);
  break;
  case 1111490575:
  case 1111490574:
  this.vwr.autoCalculate (tok, null);
  break;
  case 1111492620:
  if (this.vwr.g.rangeSelected) this.vwr.ms.clearBfactorRange ();
  break;
  case 1086324742:
  this.vwr.ms.calcSelectedGroupsCount ();
  break;
  case 1094713362:
  case 1094713361:
  this.vwr.ms.calcSelectedMonomersCount ();
  break;
  case 1094713360:
  this.vwr.ms.calcSelectedMoleculesCount ();
  break;
  }
  if (colorvalue1 != null && (isIsosurface || shapeType == 11 || shapeType == 14 || shapeType == 21)) this.setShapeProperty (shapeType, "colorPhase",  Clazz.newArray (-1, [colorvalue1, colorvalue]));
   else if (bs == null) this.setShapeProperty (shapeType, prefix + "color", colorvalue);
   else this.setShapePropertyBs (shapeType, prefix + "color", colorvalue, bs);
  }if (translucency != null) this.setShapeTranslucency (shapeType, prefix, translucency, translucentLevel, bs);
  if (typeMask != 0) this.setShapeProperty (1, "type", Integer.$valueOf (1023));
  if (doClearBondSet) this.vwr.selectBonds (null);
  if (shapeType == 0) this.vwr.shm.checkInheritedShapes ();
  }, "~N,~N,~B");
  Clazz.defineMethod (c$, "getPartialCharges",
  function (bs) {
  try {
  this.vwr.getOrCalcPartialCharges (bs, null);
  } catch (e) {
  if (Clazz.exceptionOf (e, Exception)) {
  throw  new JS.ScriptInterruption (this, "partialcharge", 1);
  } else {
  throw e;
  }
  }
  }, "JU.BS");
  Clazz.defineMethod (c$, "encodeRadiusParameter",
  function (index, isOnly, allowAbsolute) {
  var value = NaN;
  var factorType = J.atomdata.RadiusData.EnumType.ABSOLUTE;
  var vdwType = null;
  var tok = (index == -1 ? 1648363544 : this.getToken (index).tok);
  switch (tok) {
  case 1111490561:
  case 1111490562:
  case 1111492618:
  case 1113589786:
  case 1111492620:
  case 1648363544:
  value = 1;
  factorType = J.atomdata.RadiusData.EnumType.FACTOR;
  vdwType = (tok == 1648363544 ? null : J.c.VDW.getVdwType2 (JS.T.nameOf (tok)));
  tok = this.tokAt (++index);
  break;
  }
  switch (tok) {
  case 4141:
  return this.vwr.rd;
  case 1073741852:
  case 1073742116:
  case 1073741856:
  case 1073741857:
  case 1073741991:
  value = 1;
  factorType = J.atomdata.RadiusData.EnumType.FACTOR;
  this.iToken = index - 1;
  break;
  case 268435617:
  case 2:
  case 3:
  if (tok == 268435617) {
  index++;
  } else if (this.tokAt (index + 1) == 268435634) {
  value = Math.round (this.floatParameter (index));
  this.iToken = ++index;
  factorType = J.atomdata.RadiusData.EnumType.FACTOR;
  if (value < 0 || value > 200) {
  this.integerOutOfRange (0, 200);
  return null;
  }value /= 100;
  break;
  } else if (tok == 2) {
  value = this.intParameter (index);
  if (value > 749 || value < -200) {
  this.integerOutOfRange (-200, 749);
  return null;
  }if (value > 0) {
  value /= 250;
  factorType = J.atomdata.RadiusData.EnumType.ABSOLUTE;
  } else {
  value /= -100;
  factorType = J.atomdata.RadiusData.EnumType.FACTOR;
  }break;
  }var max;
  if (tok == 268435617 || !allowAbsolute) {
  factorType = J.atomdata.RadiusData.EnumType.OFFSET;
  max = 16;
  } else {
  factorType = J.atomdata.RadiusData.EnumType.ABSOLUTE;
  vdwType = J.c.VDW.NADA;
  max = 100;
  }value = this.floatParameterRange (index, (isOnly || !allowAbsolute ? -max : 0), max);
  if (Float.isNaN (value)) return null;
  if (isOnly) value = -value;
  if (value > 16) value = 16.1;
  break;
  default:
  if (value == 1) index--;
  }
  if (vdwType == null) {
  vdwType = J.c.VDW.getVdwType (this.optParameterAsString (++this.iToken));
  if (vdwType == null) {
  this.iToken = index;
  vdwType = J.c.VDW.AUTO;
  }}return  new J.atomdata.RadiusData (null, value, factorType, vdwType);
  }, "~N,~B,~B");
  Clazz.defineMethod (c$, "expandFloatArray",
  function (a, min) {
  var n = a.length;
  var haveNeg = false;
  try {
  for (var i = 0; i < a.length; i++) if (a[i] < 0) {
  n += Math.abs (a[i - 1] + a[i]) - 1;
  haveNeg = true;
  }
  if (haveNeg) {
  var b =  Clazz.newFloatArray (n, 0);
  for (var pt = 0, i = 0; i < a.length; i++) {
  n = Clazz.floatToInt (a[i]);
  if (n >= 0) {
  if (n < min) this.invArg ();
  b[pt++] = n;
  } else {
  var dif = Clazz.floatToInt (a[i - 1] + n);
  var dir = (dif < 0 ? 1 : -1);
  for (var j = Clazz.floatToInt (a[i - 1]); j != -a[i]; j += dir, pt++) b[pt] = b[pt - 1] + dir;
  
  }}
  a = b;
  n = a.length;
  }var ia =  Clazz.newIntArray (n, 0);
  for (var i = n; --i >= 0; ) ia[i] = Clazz.floatToInt (a[i]);
  
  return ia;
  } catch (e) {
  if (Clazz.exceptionOf (e, Exception)) {
  this.invArg ();
  return null;
  } else {
  throw e;
  }
  }
  }, "~A,~N");
  Clazz.defineMethod (c$, "frameControl",
   function (i) {
  switch (this.getToken (this.checkLast (i)).tok) {
  case 1073742098:
  case 1073742096:
  case 4143:
  case 20487:
  case 1073742037:
  case 1073742108:
  case 1073742125:
  case 1073741942:
  case 1073741993:
  if (!this.chk) this.vwr.setAnimation (this.theTok);
  return;
  }
  this.invArg ();
  }, "~N");
  Clazz.defineMethod (c$, "getColorRange",
  function (i) {
  var color1 = this.getArgbParam (i);
  if (this.tokAt (++this.iToken) != 1073742170) this.invArg ();
  var color2 = this.getArgbParam (++this.iToken);
  var nColors = (this.tokAt (this.iToken + 1) == 2 ? this.intParameter (++this.iToken) : 0);
  return JU.ColorEncoder.getColorSchemeList (JU.ColorEncoder.getPaletteAtoB (color1, color2, nColors));
  }, "~N");
  Clazz.defineMethod (c$, "getFullPathName",
  function () {
  var filename = (!this.chk || this.isCmdLine_C_Option ? this.vwr.fm.getFullPathName (true) : "test.xyz");
  if (filename == null) this.invArg ();
  return filename;
  });
  Clazz.defineMethod (c$, "getObjectBoundingBox",
   function (id) {
  var data =  Clazz.newArray (-1, [id, null, null]);
  return (this.getShapePropertyData (24, "getBoundingBox", data) || this.getShapePropertyData (29, "getBoundingBox", data) || this.getShapePropertyData (25, "getBoundingBox", data) || this.getShapePropertyData (28, "getBoundingBox", data) || this.getShapePropertyData (27, "getBoundingBox", data) ? data[2] : null);
  }, "~S");
  Clazz.defineMethod (c$, "getObjectCenter",
  function (axisID, index, modelIndex) {
  var data =  Clazz.newArray (-1, [axisID, Integer.$valueOf (index), Integer.$valueOf (modelIndex)]);
  return (this.getShapePropertyData (22, "getCenter", data) || this.getShapePropertyData (24, "getCenter", data) || this.getShapePropertyData (29, "getCenter", data) || this.getShapePropertyData (25, "getCenter", data) || this.getShapePropertyData (28, "getCenter", data) || this.getShapePropertyData (27, "getCenter", data) ? data[2] : null);
  }, "~S,~N,~N");
  Clazz.defineMethod (c$, "getPlaneForObject",
  function (id, vAB) {
  var shapeType = this.sm.getShapeIdFromObjectName (id);
  switch (shapeType) {
  case 22:
  this.setShapeProperty (22, "thisID", id);
  var points = this.getShapeProperty (22, "vertices");
  if (points == null || points.length < 3 || points[0] == null || points[1] == null || points[2] == null) break;
  return JU.Measure.getPlaneThroughPoints (points[0], points[1], points[2],  new JU.V3 (), vAB,  new JU.P4 ());
  case 24:
  this.setShapeProperty (24, "thisID", id);
  return this.getShapeProperty (24, "plane");
  }
  return null;
  }, "~S,JU.V3");
  Clazz.defineMethod (c$, "getQuaternionArray",
  function (quaternionOrSVData, itype) {
  var data;
  switch (itype) {
  case 134221850:
  data = quaternionOrSVData;
  break;
  case 9:
  var pts = quaternionOrSVData;
  data =  new Array (pts.length);
  for (var i = 0; i < pts.length; i++) data[i] = JU.Quat.newP4 (pts[i]);
  
  break;
  case 1073742001:
  var sv = quaternionOrSVData;
  data =  new Array (sv.size ());
  for (var i = 0; i < sv.size (); i++) {
  var pt = JS.SV.pt4Value (sv.get (i));
  if (pt == null) return null;
  data[i] = JU.Quat.newP4 (pt);
  }
  break;
  default:
  return null;
  }
  return data;
  }, "~O,~N");
  Clazz.defineMethod (c$, "getSetAxesTypeMad10",
  function (index) {
  if (index == this.slen) return 1;
  switch (this.getToken (this.checkLast (index)).tok) {
  case 1073742335:
  return 1;
  case 1073742334:
  return 0;
  case 1073741926:
  return -1;
  case 2:
  return this.intParameterRange (index, -1, 19);
  case 3:
  var angstroms = this.floatParameterRange (index, 0, 2);
  return (Float.isNaN (angstroms) ? 2147483647 : Clazz.doubleToInt (Math.floor (angstroms * 10000 * 2)));
  }
  if (!this.chk) this.errorStr (7, "\"DOTTED\"");
  return 0;
  }, "~N");
  Clazz.defineMethod (c$, "getSettingFloat",
   function (pt) {
  return (pt >= this.slen ? NaN : JS.SV.fValue (this.parameterExpressionToken (pt)));
  }, "~N");
  Clazz.defineMethod (c$, "getSettingInt",
   function (pt) {
  return (pt >= this.slen ? -2147483648 : this.parameterExpressionToken (pt).asInt ());
  }, "~N");
  Clazz.defineMethod (c$, "getSettingStr",
   function (pt, isJmolSet) {
  return (isJmolSet && this.slen == pt + 1 ? this.paramAsStr (pt) : this.parameterExpressionToken (pt).asString ());
  }, "~N,~B");
  Clazz.defineMethod (c$, "getShapeProperty",
  function (shapeType, propertyName) {
  return this.sm.getShapePropertyIndex (shapeType, propertyName, -2147483648);
  }, "~N,~S");
  Clazz.defineMethod (c$, "getShapePropertyData",
  function (shapeType, propertyName, data) {
  return this.sm.getShapePropertyData (shapeType, propertyName, data);
  }, "~N,~S,~A");
  Clazz.defineMethod (c$, "getShapeType",
   function (tok) {
  var iShape = JV.JC.shapeTokenIndex (tok);
  if (iShape < 0) this.error (49);
  return iShape;
  }, "~N");
  Clazz.defineMethod (c$, "getTranslucentLevel",
  function (i) {
  var f = this.floatParameter (i);
  return (this.theTok == 2 && f > 0 && f < 9 ? f + 1 : f);
  }, "~N");
  Clazz.defineMethod (c$, "getZoom",
   function (ptCenter, i, bs, currentZoom) {
  var zoom = (this.isFloatParameter (i) ? this.floatParameter (i++) : NaN);
  if (zoom == 0 || currentZoom == 0) {
  var r = NaN;
  if (bs == null) {
  if (this.tokAt (ptCenter) == 1073742330) {
  var bbox = this.getObjectBoundingBox (this.objectNameParameter (ptCenter + 1));
  if (bbox == null || (r = bbox[0].distance (bbox[1]) / 2) == 0) this.invArg ();
  }} else {
  r = this.vwr.ms.calcRotationRadiusBs (bs);
  }if (Float.isNaN (r)) this.invArg ();
  currentZoom = this.vwr.getFloat (570425388) / r * 100;
  zoom = NaN;
  }if (zoom < 0) {
  zoom += currentZoom;
  } else if (Float.isNaN (zoom)) {
  var tok = this.tokAt (i);
  switch (tok) {
  case 1073742079:
  case 1275068432:
  zoom = currentZoom * (tok == 1073742079 ? 0.5 : 2);
  i++;
  break;
  case 268435632:
  case 268435633:
  case 268435617:
  var value = this.floatParameter (++i);
  i++;
  switch (tok) {
  case 268435632:
  zoom = currentZoom / value;
  break;
  case 268435633:
  zoom = currentZoom * value;
  break;
  case 268435617:
  zoom = currentZoom + value;
  break;
  }
  break;
  default:
  zoom = (bs == null ? -currentZoom : currentZoom);
  }
  }this.iToken = i - 1;
  return zoom;
  }, "~N,~N,JU.BS,~N");
  Clazz.defineMethod (c$, "setElementColor",
   function (str, argb) {
  for (var i = JU.Elements.elementNumberMax; --i >= 0; ) {
  if (str.equalsIgnoreCase (JU.Elements.elementNameFromNumber (i))) {
  if (!this.chk) this.vwr.setElementArgb (i, argb);
  return true;
  }}
  for (var i = JU.Elements.altElementMax; --i >= 0; ) {
  if (str.equalsIgnoreCase (JU.Elements.altElementNameFromIndex (i))) {
  if (!this.chk) this.vwr.setElementArgb (JU.Elements.altElementNumberFromIndex (i), argb);
  return true;
  }}
  if (str.charAt (0) != '_') return false;
  for (var i = JU.Elements.elementNumberMax; --i >= 0; ) {
  if (str.equalsIgnoreCase ("_" + JU.Elements.elementSymbolFromNumber (i))) {
  if (!this.chk) this.vwr.setElementArgb (i, argb);
  return true;
  }}
  for (var i = JU.Elements.altElementMax; --i >= 4; ) {
  if (str.equalsIgnoreCase ("_" + JU.Elements.altElementSymbolFromIndex (i))) {
  if (!this.chk) this.vwr.setElementArgb (JU.Elements.altElementNumberFromIndex (i), argb);
  return true;
  }if (str.equalsIgnoreCase ("_" + JU.Elements.altIsotopeSymbolFromIndex (i))) {
  if (!this.chk) this.vwr.setElementArgb (JU.Elements.altElementNumberFromIndex (i), argb);
  return true;
  }}
  return false;
  }, "~S,~N");
  Clazz.defineMethod (c$, "setMeshDisplayProperty",
  function (shape, i, tok) {
  var propertyName = null;
  var propertyValue = null;
  var allowCOLOR = (shape == 25);
  var checkOnly = (i == 0);
  if (!checkOnly) tok = this.getToken (i).tok;
  switch (tok) {
  case 1765808134:
  if (allowCOLOR) this.iToken++;
   else break;
  case 1073742074:
  case 603979967:
  if (!checkOnly) this.colorShape (shape, this.iToken, false);
  return true;
  case 0:
  case 12291:
  case 1073742335:
  case 1073742334:
  case 12294:
  case 2097194:
  case 1610625028:
  case 2097192:
  if (this.iToken == 1 && shape >= 0 && this.tokAt (2) == 0) this.setShapeProperty (shape, "thisID", null);
  if (tok == 0) return (this.iToken == 1);
  if (checkOnly) return true;
  switch (tok) {
  case 12291:
  this.setShapeProperty (shape, "delete", null);
  return true;
  case 2097194:
  case 12294:
  tok = 1073742334;
  break;
  case 2097192:
  tok = 1073742335;
  break;
  case 1610625028:
  if (i + 1 == this.slen) tok = 1073742335;
  break;
  }
  case 1073741958:
  case 1073741861:
  case 1073741964:
  case 1073741898:
  case 1073742039:
  case 1112150019:
  case 1073742042:
  case 1073742018:
  case 1073742052:
  case 1073741938:
  case 1073742046:
  case 1073741862:
  case 1073742057:
  case 1073742182:
  case 1073742060:
  case 1073741960:
  case 1073742058:
  propertyName = "token";
  propertyValue = Integer.$valueOf (tok);
  break;
  }
  if (propertyName == null) return false;
  if (checkOnly) return true;
  this.setShapeProperty (shape, propertyName, propertyValue);
  if ((this.tokAt (this.iToken + 1)) != 0) {
  if (!this.setMeshDisplayProperty (shape, ++this.iToken, 0)) --this.iToken;
  }return true;
  }, "~N,~N,~N");
  Clazz.defineMethod (c$, "setObjectArgb",
   function (str, argb) {
  if (this.chk) return;
  this.vwr.setObjectArgb (str, argb);
  }, "~S,~N");
  Clazz.defineMethod (c$, "setObjectMad10",
  function (iShape, name, mad10) {
  if (!this.chk) this.vwr.setObjectMad10 (iShape, name, mad10);
  }, "~N,~S,~N");
  Clazz.defineMethod (c$, "setObjectProp",
   function (id, tokCommand, ptColor) {
  var data =  Clazz.newArray (-1, [id, null]);
  var s = "";
  var isWild = JU.PT.isWild (id);
  for (var iShape = 17; ; ) {
  if (this.getShapePropertyData (iShape, "checkID", data)) {
  this.setShapeProperty (iShape, "thisID", id);
  switch (tokCommand) {
  case 12291:
  this.setShapeProperty (iShape, "delete", null);
  break;
  case 12294:
  case 1610625028:
  this.setShapeProperty (iShape, "hidden", tokCommand == 1610625028 ? Boolean.FALSE : Boolean.TRUE);
  break;
  case 134222350:
  s += this.getShapeProperty (iShape, "command") + "\n";
  break;
  case 1765808134:
  if (ptColor >= 0) this.colorShape (iShape, ptColor + 1, false);
  break;
  }
  if (!isWild) break;
  }switch (iShape) {
  case 17:
  iShape = 20;
  continue;
  case 20:
  iShape = 32;
  }
  switch (--iShape) {
  case 27:
  iShape--;
  break;
  case 28:
  iShape -= 2;
  break;
  }
  if (iShape < 21) break;
  }
  return s;
  }, "~S,~N,~N");
  Clazz.defineMethod (c$, "setObjectProperty",
  function () {
  var id = this.setShapeNameParameter (2);
  return (this.chk ? "" : this.setObjectProp (id, this.tokAt (0), this.iToken));
  });
  Clazz.defineMethod (c$, "setShapeNameParameter",
  function (i) {
  var id = this.paramAsStr (i);
  var isWild = id.equals ("*");
  if (id.length == 0) this.invArg ();
  if (isWild) {
  switch (this.tokAt (i + 1)) {
  case 0:
  case 1073742335:
  case 1073742334:
  case 2097192:
  case 2097194:
  case 1765808134:
  case 12291:
  break;
  default:
  if (this.setMeshDisplayProperty (-1, 0, this.tokAt (i + 1))) break;
  id += this.optParameterAsString (++i);
  }
  }if (this.tokAt (i + 1) == 268435633) id += this.paramAsStr (++i);
  this.iToken = i;
  return id;
  }, "~N");
  Clazz.defineMethod (c$, "setShapeProperty",
  function (shapeType, propertyName, propertyValue) {
  if (!this.chk) this.sm.setShapePropertyBs (shapeType, propertyName, propertyValue, null);
  }, "~N,~S,~O");
  Clazz.defineMethod (c$, "setShapePropertyBs",
  function (iShape, propertyName, propertyValue, bs) {
  if (!this.chk) this.sm.setShapePropertyBs (iShape, propertyName, propertyValue, bs);
  }, "~N,~S,~O,JU.BS");
  Clazz.defineMethod (c$, "setShapeSize",
   function (shapeType, rd) {
  if (!this.chk) this.sm.setShapeSizeBs (shapeType, 0, rd, null);
  }, "~N,J.atomdata.RadiusData");
  Clazz.defineMethod (c$, "setShapeSizeBs",
  function (shapeType, size, bs) {
  if (!this.chk) this.sm.setShapeSizeBs (shapeType, size, null, bs);
  }, "~N,~N,JU.BS");
  Clazz.defineMethod (c$, "setShapeTranslucency",
  function (shapeType, prefix, translucency, translucentLevel, bs) {
  if (translucentLevel == 3.4028235E38) translucentLevel = this.vwr.getFloat (570425354);
  this.setShapeProperty (shapeType, "translucentLevel", Float.$valueOf (translucentLevel));
  if (prefix == null) return;
  if (bs == null) this.setShapeProperty (shapeType, prefix + "translucency", translucency);
   else if (!this.chk) this.setShapePropertyBs (shapeType, prefix + "translucency", translucency, bs);
  }, "~N,~S,~S,~N,JU.BS");
  Clazz.defineMethod (c$, "setSize",
   function (shape, scale) {
  var rd = null;
  var tok = this.tokAt (1);
  var isOnly = false;
  switch (tok) {
  case 1073742072:
  this.restrictSelected (false, false);
  case 1073742335:
  break;
  case 1073742334:
  scale = 0;
  break;
  case 3:
  isOnly = (this.floatParameter (1) < 0);
  case 2:
  default:
  rd = this.encodeRadiusParameter (1, isOnly, true);
  if (rd == null) return;
  if (Float.isNaN (rd.value)) this.invArg ();
  }
  if (rd == null) rd =  new J.atomdata.RadiusData (null, scale, J.atomdata.RadiusData.EnumType.FACTOR, J.c.VDW.AUTO);
  if (isOnly) this.restrictSelected (false, false);
  this.setShapeSize (shape, rd);
  }, "~N,~N");
  Clazz.defineMethod (c$, "setSizeBio",
   function (iShape) {
  var mad = 0;
  switch (this.getToken (1).tok) {
  case 1073742072:
  this.restrictSelected (false, false);
  case 1073742335:
  mad = -1;
  break;
  case 1073742334:
  break;
  case 1639976963:
  mad = -2;
  break;
  case 1111492620:
  case 1073741922:
  mad = -4;
  break;
  case 2:
  if ((mad = (this.intParameterRange (1, 0, 1000) * 8)) == 2147483647) return;
  break;
  case 3:
  mad = Math.round (this.floatParameterRange (1, -4.0, 4.0) * 2000);
  if (mad == 2147483647) return;
  if (mad < 0) {
  this.restrictSelected (false, false);
  mad = -mad;
  }break;
  case 10:
  if (!this.chk) this.sm.loadShape (iShape);
  this.setShapeProperty (iShape, "bitset", this.theToken.value);
  return;
  default:
  this.error (6);
  }
  this.setShapeSizeBs (iShape, mad, null);
  }, "~N");
  Clazz.defineMethod (c$, "setUnits",
   function (units, tok) {
  if (tok == 545259568 && (units.endsWith ("hz") || JU.PT.isOneOf (units.toLowerCase (), ";angstroms;au;bohr;nanometers;nm;picometers;pm;vanderwaals;vdw;"))) {
  if (!this.chk) this.vwr.setUnits (units, true);
  } else if (tok == 545259559 && JU.PT.isOneOf (units.toLowerCase (), ";kcal;kj;")) {
  if (!this.chk) this.vwr.setUnits (units, false);
  } else {
  this.errorStr2 (50, "set " + JS.T.nameOf (tok), units);
  }return true;
  }, "~S,~N");
  Clazz.defineMethod (c$, "toString",
  function () {
  var str =  new JU.SB ();
  str.append ("Eval\n pc:");
  str.appendI (this.pc);
  str.append ("\n");
  str.appendI (this.aatoken.length);
  str.append (" statements\n");
  for (var i = 0; i < this.aatoken.length; ++i) {
  str.append ("----\n");
  var atoken = this.aatoken[i];
  for (var j = 0; j < atoken.length; ++j) {
  str.appendO (atoken[j]);
  str.appendC ('\n');
  }
  str.appendC ('\n');
  }
  str.append ("END\n");
  return str.toString ();
  });
  Clazz.defineStatics (c$,
  "saveList", "bonds? context? coordinates? orientation? rotation? selection? state? structure?",
  "iProcess", 0,
  "commandHistoryLevelMax", 0,
  "contextDepthMax", 100,
  "scriptReportingLevel", 0);
  });
  