text: Clazz.declarePackage ("JS");
  Clazz.load (null, "JS.ScriptTokenParser", ["java.lang.Float", "JU.Lst", "$.P3", "$.PT", "J.i18n.GT", "JS.ScriptParam", "$.T", "JU.Logger", "$.SimpleUnitCell"], function () {
  c$ = Clazz.decorateAsClass (function () {
  this.vwr = null;
  this.script = null;
  this.isStateScript = false;
  this.lineCurrent = 0;
  this.iCommand = 0;
  this.ichCurrentCommand = 0;
  this.ichComment = 0;
  this.ichEnd = 0;
  this.ichToken = 0;
  this.theToken = null;
  this.lastFlowCommand = null;
  this.tokenCommand = null;
  this.lastToken = null;
  this.tokenAndEquals = null;
  this.theTok = 0;
  this.nTokens = 0;
  this.tokCommand = 0;
  this.ptNewSetModifier = 0;
  this.isNewSet = false;
  this.logMessages = false;
  this.atokenInfix = null;
  this.itokenInfix = 0;
  this.isSetBrace = false;
  this.isMathExpressionCommand = false;
  this.isSetOrDefine = false;
  this.ltokenPostfix = null;
  this.isEmbeddedExpression = false;
  this.isCommaAsOrAllowed = false;
  this.theValue = null;
  this.htUserFunctions = null;
  this.haveString = false;
  this.residueSpecCodeGenerated = false;
  this.errorMessage = null;
  this.errorMessageUntranslated = null;
  this.errorLine = null;
  this.errorType = null;
  Clazz.instantialize (this, arguments);
  }, JS, "ScriptTokenParser");
  Clazz.defineMethod (c$, "compileExpressions", 
  function () {
  var isScriptExpression = (this.tokCommand == 135271429 && this.tokAt (2) == 269484048);
  this.isEmbeddedExpression = (isScriptExpression || (this.tokCommand != 0 && (this.tokCommand != 135368713 && this.tokCommand != 102436 && this.tokCommand != 364558 && this.tokCommand != 102412 || this.tokenCommand.intValue != 2147483647) && this.tokCommand != 1150985 && !JS.T.tokAttr (this.tokCommand, 12288) && (this.nTokens > 2 || !JS.T.tokAttr (this.tokCommand, 20480))));
  this.isMathExpressionCommand = (this.tokCommand == 1073741824 || isScriptExpression || JS.T.tokAttr (this.tokCommand, 36864));
  var checkExpression = this.isEmbeddedExpression || (JS.T.tokAttr (this.tokCommand, 12288));
  if (this.tokAt (1) == 1048582 && JS.T.tokAttr (this.tokCommand, 12288)) checkExpression = false;
  if (checkExpression && !this.compileExpression ()) return false;
  var size = this.atokenInfix.length;
  var nDefined = 0;
  for (var i = 1; i < size; i++) {
  if (this.tokAt (i) == 1060866) nDefined++;
  }
  size -= nDefined;
  if (this.isNewSet) {
  if (size == 1) {
  this.atokenInfix[0] = JS.T.tv (135368713, 0, this.atokenInfix[0].value);
  this.isNewSet = false;
  }}return ((this.isNewSet || this.isSetBrace) && size < this.ptNewSetModifier + 2 ? this.commandExpected () : size == 1 || !JS.T.tokAttr (this.tokCommand, 262144) ? true : this.error (0));
  });
  Clazz.defineMethod (c$, "compileExpression", 
  function () {
  var firstToken = (this.isSetOrDefine && !this.isSetBrace ? 2 : 1);
  this.ltokenPostfix =  new JU.Lst ();
  this.itokenInfix = 0;
  var tokenBegin = null;
  var tok = this.tokAt (1);
  switch (this.tokCommand) {
  case 1060866:
  var i = (this.tokAt (1) == 1060866 ? 2 : 1);
  if (this.tokAt (i) == 2 && this.tokAt (i + 1) == 1048583 && this.tokAt (i + 3) == 269484436) {
  this.tokCommand = 1085443;
  this.isSetBrace = true;
  this.ptNewSetModifier = i + 3;
  this.isMathExpressionCommand = true;
  this.isEmbeddedExpression = true;
  this.addTokenToPostfixToken (JS.T.tokenSetProperty);
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  for (var j = 0; j++ <= i; ) this.addNextToken ();
  
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  firstToken = 0;
  }break;
  case 12295:
  if (tok == 1678770178) firstToken = 2;
  break;
  case 135280133:
  switch (tok) {
  case 1048589:
  case 1048588:
  tok = this.tokAt (++firstToken);
  break;
  }
  case 12294:
  case 1610625028:
  switch (tok) {
  case 1276118017:
  case 1073742119:
  tok = this.tokAt (++firstToken);
  break;
  }
  if (tok == 1087373318 && !JS.T.tokAttr (this.tokAt (firstToken + 1), 269484032)) firstToken++;
  }
  for (var i = 0; i < firstToken && this.addNextToken (); i++) {
  }
  while (this.moreTokens ()) {
  if (this.isEmbeddedExpression) {
  while (!this.isExpressionNext ()) {
  if (this.tokPeekIs (1073741824) && !(this.tokCommand == 135271427 && this.itokenInfix == 1)) {
  var name = this.atokenInfix[this.itokenInfix].value;
  var t = JS.T.getTokenFromName (name);
  if (t != null) if (!this.isMathExpressionCommand && this.lastToken.tok != 1060866 || (this.lastToken.tok == 1048583 || this.tokAt (this.itokenInfix + 1) == 269484048) && !this.isUserFunction (name)) {
  this.atokenInfix[this.itokenInfix] = t;
  }}if (!this.addNextToken ()) break;
  }
  if (!this.moreTokens ()) break;
  }if (this.lastToken.tok == 1060866) {
  if (!this.clauseDefine (true, false)) return false;
  continue;
  }if (!this.isMathExpressionCommand) this.addTokenToPostfixToken (tokenBegin = JS.T.o (1048577, "implicitExpressionBegin"));
  if (!this.clauseOr (this.isCommaAsOrAllowed || !this.isMathExpressionCommand && this.tokPeekIs (269484048))) return false;
  if (!this.isMathExpressionCommand && !(this.isEmbeddedExpression && this.lastToken === JS.T.tokenCoordinateEnd)) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  }if (this.moreTokens ()) {
  if (this.tokCommand != 135280133 && this.tokCommand != 12291 && !this.isEmbeddedExpression) return this.error (5);
  if (this.tokCommand == 135280133) {
  tokenBegin.intValue = 0;
  this.tokCommand = 0;
  this.isEmbeddedExpression = true;
  this.isMathExpressionCommand = true;
  this.isCommaAsOrAllowed = false;
  }}}
  this.atokenInfix = this.ltokenPostfix.toArray ( new Array (this.ltokenPostfix.size ()));
  return true;
  });
  Clazz.defineMethod (c$, "isUserFunction", 
  function (name) {
  return (!this.isStateScript && (this.vwr.isFunction (name) || this.htUserFunctions.containsKey (name)));
  }, "~S");
  Clazz.defineMethod (c$, "isExpressionNext", 
   function () {
  return this.tokPeekIs (1048586) && !(this.tokAt (this.itokenInfix + 1) == 4 && this.tokAt (this.itokenInfix + 2) == 269484066) || !this.isMathExpressionCommand && this.tokPeekIs (269484048);
  });
  c$.tokenAttr = Clazz.defineMethod (c$, "tokenAttr", 
  function (token, tok) {
  return token != null && JS.T.tokAttr (token.tok, tok);
  }, "JS.T,~N");
  Clazz.defineMethod (c$, "moreTokens", 
   function () {
  return (this.itokenInfix < this.atokenInfix.length);
  });
  Clazz.defineMethod (c$, "tokAt", 
  function (i) {
  return (i < this.atokenInfix.length ? this.atokenInfix[i].tok : 0);
  }, "~N");
  Clazz.defineMethod (c$, "tokPeek", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? 0 : this.atokenInfix[this.itokenInfix].tok);
  });
  Clazz.defineMethod (c$, "tokPeekIs", 
   function (tok) {
  return (this.tokAt (this.itokenInfix) == tok);
  }, "~N");
  Clazz.defineMethod (c$, "intPeek", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? 2147483647 : this.atokenInfix[this.itokenInfix].intValue);
  });
  Clazz.defineMethod (c$, "valuePeek", 
   function () {
  return (this.moreTokens () ? this.atokenInfix[this.itokenInfix].value : "");
  });
  Clazz.defineMethod (c$, "tokenNext", 
   function () {
  return (this.itokenInfix >= this.atokenInfix.length ? null : this.atokenInfix[this.itokenInfix++]);
  });
  Clazz.defineMethod (c$, "tokenNextTok", 
   function (tok) {
  var token = this.tokenNext ();
  return (token != null && token.tok == tok);
  }, "~N");
  Clazz.defineMethod (c$, "returnToken", 
   function () {
  this.itokenInfix--;
  return false;
  });
  Clazz.defineMethod (c$, "getToken", 
   function () {
  this.theValue = ((this.theToken = this.tokenNext ()) == null ? null : this.theToken.value);
  return this.theToken;
  });
  Clazz.defineMethod (c$, "getNumericalToken", 
   function () {
  return (this.getToken () != null && (this.theToken.tok == 2 || this.theToken.tok == 3));
  });
  Clazz.defineMethod (c$, "floatValue", 
   function () {
  switch (this.theToken.tok) {
  case 2:
  return this.theToken.intValue;
  case 3:
  return (this.theValue).floatValue ();
  }
  return 0;
  });
  Clazz.defineMethod (c$, "addTokenToPostfix", 
   function (tok, value) {
  return this.addTokenToPostfixToken (JS.T.o (tok, value));
  }, "~N,~O");
  Clazz.defineMethod (c$, "addTokenToPostfixInt", 
   function (tok, intValue, value) {
  return this.addTokenToPostfixToken (JS.T.tv (tok, intValue, value));
  }, "~N,~N,~O");
  Clazz.defineMethod (c$, "addTokenToPostfixToken", 
   function (token) {
  if (token == null) return false;
  if (this.logMessages) JU.Logger.debug ("addTokenToPostfix" + token);
  this.ltokenPostfix.addLast (token);
  this.lastToken = token;
  return true;
  }, "JS.T");
  Clazz.defineMethod (c$, "addNextToken", 
   function () {
  return this.addTokenToPostfixToken (this.tokenNext ());
  });
  Clazz.defineMethod (c$, "addNextTokenIf", 
   function (tok) {
  return (this.tokPeekIs (tok) && this.addNextToken ());
  }, "~N");
  Clazz.defineMethod (c$, "addSubstituteTokenIf", 
   function (tok, token) {
  if (!this.tokPeekIs (tok)) return false;
  this.itokenInfix++;
  return this.addTokenToPostfixToken (token);
  }, "~N,JS.T");
  Clazz.defineMethod (c$, "clauseOr", 
   function (allowComma) {
  this.haveString = false;
  if (!this.clauseAnd ()) return false;
  if (this.isEmbeddedExpression && this.lastToken.tok == 1048578) return true;
  var tok;
  while ((tok = this.tokPeek ()) == 269484112 || tok == 269484113 || tok == 269484114 || allowComma && tok == 269484080) {
  if (tok == 269484080 && !this.haveString) this.addSubstituteTokenIf (269484080, JS.T.tokenOr);
   else this.addNextToken ();
  if (!this.clauseAnd ()) return false;
  if (allowComma && (this.lastToken.tok == 1048590 || this.lastToken.tok == 10)) this.haveString = true;
  }
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseAnd", 
   function () {
  if (!this.clauseNot ()) return false;
  if (this.isEmbeddedExpression && this.lastToken.tok == 1048578) return true;
  while (this.tokPeekIs (269484128)) {
  this.addNextToken ();
  if (!this.clauseNot ()) return false;
  }
  return true;
  });
  Clazz.defineMethod (c$, "clauseNot", 
   function () {
  if (this.tokPeekIs (269484144)) {
  this.addNextToken ();
  return this.clauseNot ();
  }return (this.clausePrimitive ());
  });
  Clazz.defineMethod (c$, "clausePrimitive", 
   function () {
  var tok = this.tokPeek ();
  switch (tok) {
  case 1073742195:
  this.itokenInfix++;
  return this.clausePrimitive ();
  case 0:
  return this.error (4);
  case 1048579:
  case 10:
  case 269484208:
  case 137363467:
  case 3145736:
  case 3145735:
  case 3145738:
  case 1048585:
  case 1048587:
  case 3145760:
  return this.addNextToken ();
  case 4:
  this.haveString = true;
  return this.addNextToken ();
  case 3:
  return this.addTokenToPostfixInt (1048611, this.fixModelSpec (this.getToken ()), this.theValue);
  case 1095761925:
  case 1095761926:
  return this.clauseCell (tok);
  case 135266310:
  return this.clauseConnected ();
  case 135267335:
  case 135267336:
  return this.clauseSubstructure ();
  case 135266325:
  case 135402505:
  return this.clauseWithin (tok == 135266325);
  case 1060866:
  return this.clauseDefine (false, false);
  case 1678770178:
  case 1746538509:
  this.addNextToken ();
  if (this.tokPeekIs (10)) this.addNextToken ();
   else if (this.tokPeekIs (1060866)) return this.clauseDefine (false, false);
  return true;
  case 269484048:
  this.addNextToken ();
  if (!this.clauseOr (true)) return false;
  if (!this.addNextTokenIf (269484049)) return this.errorStr (15, ")");
  return this.checkForItemSelector (true);
  case 1048586:
  return this.checkForCoordinate (this.isMathExpressionCommand);
  default:
  if (this.clauseResidueSpec ()) return true;
  if (this.isError ()) return false;
  if (JS.T.tokAttr (tok, 1078984704)) {
  var itemp = this.itokenInfix;
  var isOK = this.clauseComparator (true);
  if (isOK || this.itokenInfix != itemp) return isOK;
  if (tok == 1238369286) {
  return this.clauseSubstructure ();
  }}return this.addNextToken ();
  }
  });
  Clazz.defineMethod (c$, "checkForCoordinate", 
   function (isImplicitExpression) {
  var isCoordinate = false;
  var pt = this.ltokenPostfix.size ();
  if (isImplicitExpression) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  this.tokenNext ();
  } else if (this.isEmbeddedExpression) {
  this.tokenNext ();
  pt--;
  } else {
  this.addNextToken ();
  }var isHash = this.tokPeekIs (4);
  if (isHash) {
  isImplicitExpression = false;
  this.returnToken ();
  this.ltokenPostfix.remove (this.ltokenPostfix.size () - 1);
  this.addNextToken ();
  var nBrace = 1;
  while (nBrace != 0) {
  if (this.tokPeekIs (1048586)) {
  if (this.isExpressionNext ()) {
  this.addTokenToPostfixToken (JS.T.o (1048577, "implicitExpressionBegin"));
  if (!this.clauseOr (true)) return false;
  if (this.lastToken !== JS.T.tokenCoordinateEnd) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  }} else {
  nBrace++;
  }}if (this.tokPeekIs (1048590)) nBrace--;
  this.addNextToken ();
  }
  } else {
  if (!this.tokPeekIs (1048590) && !this.clauseOr (false)) return false;
  var n = 1;
  while (!this.tokPeekIs (1048590)) {
  var haveComma = this.addNextTokenIf (269484080);
  if (!this.clauseOr (false)) return (haveComma || n < 3 ? false : this.errorStr (15, "}"));
  n++;
  }
  isCoordinate = (n >= 2);
  }if (isCoordinate && (isImplicitExpression || this.isEmbeddedExpression)) {
  this.ltokenPostfix.set (pt, JS.T.tokenCoordinateBegin);
  this.addTokenToPostfixToken (JS.T.tokenCoordinateEnd);
  this.tokenNext ();
  } else if (isImplicitExpression) {
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  this.tokenNext ();
  } else if (this.isEmbeddedExpression && !isHash) {
  this.tokenNext ();
  } else {
  this.addNextToken ();
  }return this.checkForItemSelector (!isHash);
  }, "~B");
  Clazz.defineMethod (c$, "checkForItemSelector", 
   function (allowNumeric) {
  var tok;
  if ((tok = this.tokAt (this.itokenInfix + 1)) == 269484096 || allowNumeric && tok == 1048586) return true;
  while (true) {
  if (!this.addNextTokenIf (269484096)) break;
  if (!this.clauseItemSelector ()) return false;
  if (!this.addNextTokenIf (269484097)) return this.errorStr (15, "]");
  }
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseWithin", 
   function (isWithin) {
  this.addNextToken ();
  if (!this.addNextTokenIf (269484048)) return false;
  if (this.getToken () == null) return false;
  var distance = 3.4028235E38;
  var key = null;
  var allowComma = isWithin;
  var tok;
  var tok0 = this.theToken.tok;
  if (!isWithin) {
  tok = -1;
  for (var i = this.itokenInfix; tok != 0; i++) {
  switch (tok = this.tokAt (i)) {
  case 269484080:
  tok = 0;
  break;
  case 1048586:
  case 269484048:
  case 269484049:
  distance = 100;
  this.returnToken ();
  tok0 = tok = 0;
  break;
  }
  }
  }switch (tok0) {
  case 269484192:
  if (this.getToken () == null) return false;
  if (this.theToken.tok != 2) return this.error (12);
  distance = -this.theToken.intValue;
  break;
  case 2:
  case 3:
  distance = this.floatValue ();
  break;
  case 1060866:
  this.addTokenToPostfixToken (this.theToken);
  if (!this.clauseDefine (true, false)) return false;
  key = "";
  allowComma = false;
  break;
  }
  if (isWithin && distance == 3.4028235E38) switch (tok0) {
  case 1060866:
  break;
  case 1073741916:
  case 1073742128:
  case 135267335:
  case 135267336:
  case 1238369286:
  case 1073741925:
  case 1073742189:
  this.addTokenToPostfix (4, this.theValue);
  if (!this.addNextTokenIf (269484080)) return false;
  allowComma = false;
  tok = this.tokPeek ();
  switch (tok) {
  case 0:
  return false;
  case 4:
  this.addNextToken ();
  key = "";
  break;
  case 1060866:
  if (!this.clauseDefine (false, true)) return false;
  key = "";
  break;
  default:
  return false;
  }
  break;
  case 1048580:
  allowComma = false;
  case 1087375361:
  case 1087375362:
  case 1073741864:
  case 1679429641:
  case 1087373316:
  case 1048581:
  case 1087375365:
  case 1087373318:
  case 137363467:
  case 1095766030:
  case 1095761936:
  case 135266319:
  case 135267841:
  case 1095761937:
  case 1087373320:
  case 3145760:
  case 1095761941:
  case 1641025539:
  case 4:
  case 1649412120:
  key = this.theValue;
  break;
  case 1073741824:
  key = (this.theValue).toLowerCase ();
  break;
  default:
  return this.errorIntStr2 (18, "WITHIN", ": " + this.theToken.value);
  }
  if (key == null) this.addTokenToPostfix (3, Float.$valueOf (distance));
   else if (key.length > 0) this.addTokenToPostfix (4, key);
  var done = false;
  while (!done) {
  if (tok0 != 0 && !this.addNextTokenIf (269484080)) break;
  if (tok0 == 0) tok0 = 135402505;
  var isCoordOrPlane = false;
  tok = this.tokPeek ();
  if (isWithin) {
  switch (tok0) {
  case 2:
  case 3:
  if (tok == 1048589 || tok == 1048588) {
  this.addTokenToPostfixToken (this.getToken ());
  if (!this.addNextTokenIf (269484080)) break;
  tok = this.tokPeek ();
  }break;
  }
  if (key == null) {
  switch (tok) {
  case 135267841:
  case 1048581:
  case 135266319:
  isCoordOrPlane = true;
  this.addNextToken ();
  break;
  case 1048582:
  this.getToken ();
  this.getToken ();
  this.addTokenToPostfix (4, "$" + this.theValue);
  done = true;
  break;
  case 1087373318:
  case 1649412120:
  this.getToken ();
  this.addTokenToPostfix (4, JS.T.nameOf (tok));
  break;
  case 1048586:
  this.returnToken ();
  isCoordOrPlane = true;
  this.addTokenToPostfixToken (JS.T.getTokenFromName (distance == 3.4028235E38 ? "plane" : "coord"));
  }
  if (!done) this.addNextTokenIf (269484080);
  }}tok = this.tokPeek ();
  if (done) break;
  if (isCoordOrPlane) {
  while (!this.tokPeekIs (269484049)) {
  switch (this.tokPeek ()) {
  case 0:
  return this.error (4);
  case 269484048:
  this.addTokenToPostfixToken (JS.T.tokenExpressionBegin);
  this.addNextToken ();
  if (!this.clauseOr (false)) return this.errorIntStr2 (18, "WITHIN", ": ?");
  if (!this.addNextTokenIf (269484049)) return this.errorStr (15, ", / )");
  this.addTokenToPostfixToken (JS.T.tokenExpressionEnd);
  break;
  case 1060866:
  if (!this.clauseDefine (false, false)) return false;
  break;
  default:
  this.addTokenToPostfixToken (this.getToken ());
  }
  }
  } else if (!this.clauseOr (allowComma)) {
  }}
  if (!this.addNextTokenIf (269484049)) return this.errorStr (15, ")");
  return true;
  }, "~B");
  Clazz.defineMethod (c$, "clauseConnected", 
   function () {
  this.addNextToken ();
  if (!this.addNextTokenIf (269484048)) {
  this.addTokenToPostfixToken (JS.T.tokenLeftParen);
  this.addTokenToPostfixToken (JS.T.tokenRightParen);
  return true;
  }while (true) {
  if (this.addNextTokenIf (2)) if (!this.addNextTokenIf (269484080)) break;
  if (this.addNextTokenIf (2)) if (!this.addNextTokenIf (269484080)) break;
  if (this.addNextTokenIf (3)) if (!this.addNextTokenIf (269484080)) break;
  if (this.addNextTokenIf (3)) if (!this.addNextTokenIf (269484080)) break;
  var o = this.getToken ().value;
  var strOrder = (Clazz.instanceOf (o, String) ? o : " ");
  var intType = JS.ScriptParam.getBondOrderFromString (strOrder);
  if (intType == 131071) {
  this.returnToken ();
  } else {
  this.addTokenToPostfix (4, strOrder);
  if (!this.addNextTokenIf (269484080)) break;
  }if (this.addNextTokenIf (269484049)) return true;
  if (!this.clauseOr (this.tokPeekIs (269484048))) return false;
  if (this.addNextTokenIf (269484049)) return true;
  if (!this.addNextTokenIf (269484080)) return false;
  if (!this.clauseOr (this.tokPeekIs (269484048))) return false;
  break;
  }
  if (!this.addNextTokenIf (269484049)) return this.errorStr (15, ")");
  return true;
  });
  Clazz.defineMethod (c$, "clauseSubstructure", 
   function () {
  this.addNextToken ();
  if (!this.addNextTokenIf (269484048)) return false;
  if (this.tokPeekIs (1060866)) {
  if (!this.clauseDefine (false, true)) return false;
  } else if (!this.addNextTokenIf (4)) {
  return this.errorStr (15, "\"...\"");
  }if (this.addNextTokenIf (269484080)) if (!this.clauseOr (this.tokPeekIs (269484048))) return false;
  if (!this.addNextTokenIf (269484049)) return this.errorStr (15, ")");
  return true;
  });
  Clazz.defineMethod (c$, "clauseItemSelector", 
   function () {
  var tok;
  var nparen = 0;
  while ((tok = this.tokPeek ()) != 0 && tok != 269484097) {
  this.addNextToken ();
  if (tok == 269484096) nparen++;
  if (this.tokPeek () == 269484097 && nparen-- > 0) this.addNextToken ();
  }
  return true;
  });
  Clazz.defineMethod (c$, "clauseComparator", 
   function (isOptional) {
  var tokenAtomProperty = this.tokenNext ();
  var tokenComparator = this.tokenNext ();
  if (!JS.ScriptTokenParser.tokenAttr (tokenComparator, 269484288)) {
  if (!isOptional) return this.errorStr (15, "== != < > <= >=");
  if (tokenComparator != null) this.returnToken ();
  this.returnToken ();
  return false;
  }if (JS.ScriptTokenParser.tokenAttr (tokenAtomProperty, 1087373312) && tokenComparator.tok != 269484436 && tokenComparator.tok != 269484438 && tokenComparator.tok != 269484437) return this.errorStr (15, "== !=");
  if (this.tokPeek () == 269484096) {
  this.getToken ();
  this.addTokenToPostfixToken (JS.T.tokenLeftParen);
  while (true) {
  if (!this.addCompare (tokenAtomProperty, tokenComparator)) return false;
  if (this.tokPeek () == 269484080) this.getToken ();
   else if (this.tokPeek () == 269484097) break;
  this.addTokenToPostfixToken (tokenComparator.tok == 269484437 ? JS.T.tokenAnd : JS.T.tokenOr);
  }
  this.getToken ();
  this.addTokenToPostfixToken (JS.T.tokenRightParen);
  return true;
  }return this.addCompare (tokenAtomProperty, tokenComparator);
  }, "~B");
  Clazz.defineMethod (c$, "addCompare", 
   function (tokenAtomProperty, tokenComparator) {
  if (this.getToken () == null) return this.errorStr (17, "" + this.valuePeek ());
  var isNegative = (this.theToken.tok == 269484192);
  if (isNegative && this.getToken () == null) return this.error (12);
  switch (this.theToken.tok) {
  case 2:
  case 3:
  case 1073741824:
  case 4:
  case 1048586:
  case 1060866:
  break;
  default:
  if (!JS.T.tokAttr (this.theToken.tok, 1073741824)) return this.error (13);
  }
  this.addTokenToPostfixInt (tokenComparator.tok, tokenAtomProperty.tok, tokenComparator.value + (isNegative ? " -" : ""));
  if (tokenAtomProperty.tok == 1716520985) this.addTokenToPostfixToken (tokenAtomProperty);
  if (this.theToken.tok == 1048586) {
  this.returnToken ();
  return this.clausePrimitive ();
  }this.addTokenToPostfixToken (this.theToken);
  if (this.theToken.tok == 1060866) return this.clauseDefine (true, false);
  return true;
  }, "JS.T,JS.T");
  Clazz.defineMethod (c$, "clauseCell", 
   function (tok) {
  var cell =  new JU.P3 ();
  this.tokenNext ();
  if (!this.tokenNextTok (269484436)) return this.errorStr (15, "=");
  if (this.getToken () == null) return this.error (3);
  if (this.theToken.tok == 2) {
  JU.SimpleUnitCell.ijkToPoint3f (this.theToken.intValue, cell, 1);
  return this.addTokenToPostfix (tok, cell);
  }if (this.theToken.tok != 1048586 || !this.getNumericalToken ()) return this.error (3);
  cell.x = this.floatValue ();
  if (this.tokPeekIs (269484080)) this.tokenNext ();
  if (!this.getNumericalToken ()) return this.error (3);
  cell.y = this.floatValue ();
  if (this.tokPeekIs (269484080)) this.tokenNext ();
  if (!this.getNumericalToken () || !this.tokenNextTok (1048590)) return this.error (3);
  cell.z = this.floatValue ();
  return this.addTokenToPostfix (tok, cell);
  }, "~N");
  Clazz.defineMethod (c$, "clauseDefine", 
   function (haveToken, forceString) {
  if (!haveToken) {
  var token = this.tokenNext ();
  if (forceString) token = JS.T.tokenDefineString;
  this.addTokenToPostfixToken (token);
  }if (this.tokPeekIs (0)) return this.error (4);
  if (!this.addSubstituteTokenIf (1048586, JS.T.tokenExpressionBegin)) {
  if (this.tokPeek () == 1060866) this.addNextToken ();
  return this.addNextToken () && this.checkForItemSelector (true);
  }while (this.moreTokens () && !this.tokPeekIs (1048590)) {
  if (this.tokPeekIs (1048586)) {
  if (!this.checkForCoordinate (true)) return false;
  } else {
  this.addNextToken ();
  }}
  return this.addSubstituteTokenIf (1048590, JS.T.tokenExpressionEnd) && this.checkForItemSelector (true);
  }, "~B,~B");
  Clazz.defineMethod (c$, "generateResidueSpecCode", 
   function (token) {
  if (this.residueSpecCodeGenerated) this.addTokenToPostfixToken (JS.T.tokenAndSpec);
  this.addTokenToPostfixToken (token);
  this.residueSpecCodeGenerated = true;
  return true;
  }, "JS.T");
  Clazz.defineMethod (c$, "clauseResidueSpec", 
   function () {
  var tok = this.tokPeek ();
  this.residueSpecCodeGenerated = false;
  var checkResNameSpec = false;
  switch (tok) {
  case 0:
  case 3145732:
  case 3145750:
  return false;
  case 2:
  case 269484066:
  case 269484210:
  case 5:
  break;
  case 269484209:
  case 269484096:
  case 1073741824:
  checkResNameSpec = true;
  break;
  default:
  if (JS.T.tokAttr (tok, 269484288)) return false;
  var str = "" + this.valuePeek ();
  checkResNameSpec = (str.length == 2 || str.length == 3);
  if (!checkResNameSpec) return false;
  }
  var specSeen = false;
  if (checkResNameSpec) {
  if (!this.clauseResNameSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 2 || tok == 269484209 || tok == 5) {
  if (!this.clauseSequenceSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 269484066) {
  if (!this.clauseChainSpec (tok)) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 1048583) {
  if (!this.clauseAtomSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 269484210) {
  if (!this.clauseAlternateSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (tok == 269484208) {
  if (!this.clauseModelSpec ()) return false;
  specSeen = true;
  tok = this.tokPeek ();
  }if (!specSeen) return this.error (14);
  if (!this.residueSpecCodeGenerated) {
  this.addTokenToPostfixToken (JS.T.tokenAll);
  }return true;
  });
  Clazz.defineMethod (c$, "clauseResNameSpec", 
   function () {
  this.getToken ();
  var tok = this.tokPeek ();
  switch (this.theToken.tok) {
  case 269484209:
  return true;
  case 269484096:
  var strSpec = "";
  while (this.getToken () != null && this.theToken.tok != 269484097) strSpec += this.theValue;
  
  if (this.theToken == null) return false;
  if (strSpec === "") return true;
  var pt;
  return (strSpec.length > 0 && (pt = strSpec.indexOf ("*")) >= 0 && pt != strSpec.length - 1 ? this.error (14) : this.generateResidueSpecCode (JS.T.o (1048612, strSpec.toUpperCase ())));
  default:
  if (JS.T.tokAttr (tok, 269484288)) {
  this.returnToken ();
  return false;
  }var res = this.theValue;
  if (tok == 269484209) {
  res = this.theValue + "*";
  this.getToken ();
  }return this.generateResidueSpecCode (JS.T.o (1073741824, res));
  }
  });
  Clazz.defineMethod (c$, "clauseSequenceSpec", 
   function () {
  if (this.tokPeek () == 269484209) return (this.getToken () != null);
  var seqToken = this.getSequenceCode (false);
  if (seqToken == null) return false;
  var tok = this.tokPeek ();
  if (tok == 269484192 || tok == 2 && this.intPeek () < 0) {
  if (tok == 269484192) {
  this.tokenNext ();
  } else {
  var i = -this.intPeek ();
  this.tokenNext ().intValue = i;
  this.returnToken ();
  }seqToken.tok = 1048615;
  this.generateResidueSpecCode (seqToken);
  return this.addTokenToPostfixToken (this.getSequenceCode (true));
  }return this.generateResidueSpecCode (seqToken);
  });
  Clazz.defineMethod (c$, "getSequenceCode", 
   function (isSecond) {
  var seqcode = 2147483647;
  var seqvalue = 2147483647;
  switch (this.tokPeek ()) {
  case 5:
  seqcode = this.tokenNext ().intValue;
  break;
  case 2:
  seqvalue = this.tokenNext ().intValue;
  break;
  default:
  if (!isSecond) return null;
  }
  return JS.T.tv (1048614, seqvalue, Integer.$valueOf (seqcode));
  }, "~B");
  Clazz.defineMethod (c$, "clauseChainSpec", 
   function (tok) {
  this.tokenNext ();
  tok = this.tokPeek ();
  var strChain;
  if (this.isTerminator (tok)) {
  strChain = " ";
  } else {
  switch (tok) {
  case 269484209:
  return (this.getToken () != null);
  case 2:
  this.getToken ();
  var val = this.theToken.intValue;
  if (val < 0 || val > 9999) return this.error (8);
  strChain = "" + val;
  break;
  case 4:
  this.vwr.getChainID ("a", true);
  default:
  strChain = "" + this.getToken ().value;
  break;
  }
  if (strChain.length == 0) strChain = " ";
   else if (strChain.equals ("?")) return true;
  }var chain = this.vwr.getChainID (strChain, false);
  return this.generateResidueSpecCode (JS.T.tv (1048609, chain, "spec_chain"));
  }, "~N");
  Clazz.defineMethod (c$, "clauseAlternateSpec", 
   function () {
  this.tokenNext ();
  if (this.isTerminator (this.tokPeek ())) return this.generateResidueSpecCode (JS.T.o (1048607, null));
  switch (this.getToken ().tok) {
  case 269484209:
  case 4:
  case 2:
  case 1073741824:
  case 1112541205:
  case 1112541206:
  case 1112541207:
  case 1141899281:
  break;
  default:
  return this.error (10);
  }
  return this.generateResidueSpecCode (JS.T.o (1048607, this.theToken.value));
  });
  Clazz.defineMethod (c$, "isTerminator", 
   function (tok) {
  switch (tok) {
  case 0:
  case 269484208:
  case 269484128:
  case 269484112:
  case 269484144:
  case 269484080:
  case 269484049:
  case 1048590:
  return true;
  default:
  return false;
  }
  }, "~N");
  Clazz.defineMethod (c$, "clauseModelSpec", 
   function () {
  this.getToken ();
  switch (this.tokPeek ()) {
  case 269484209:
  this.getToken ();
  return true;
  case 2:
  return this.generateResidueSpecCode (JS.T.o (1048610, Integer.$valueOf (this.getToken ().intValue)));
  case 3:
  return this.generateResidueSpecCode (JS.T.tv (1048610, this.fixModelSpec (this.getToken ()), this.theValue));
  }
  return this.error (10);
  });
  Clazz.defineMethod (c$, "fixModelSpec", 
   function (token) {
  var ival = token.intValue;
  if (ival == 2147483647) {
  var f = (this.theValue).floatValue ();
  if (f == Clazz.floatToInt (f)) ival = (Clazz.floatToInt (f)) * 1000000;
  if (ival < 0) ival = 2147483647;
  }return ival;
  }, "JS.T");
  Clazz.defineMethod (c$, "clauseAtomSpec", 
   function () {
  if (!this.tokenNextTok (1048583)) return this.error (7);
  if (this.getToken () == null) return true;
  var atomSpec = "";
  if (this.theToken.tok == 2) {
  atomSpec += "" + this.theToken.intValue;
  if (this.getToken () == null) return this.error (7);
  }if (this.theToken.tok == 269484209) return true;
  atomSpec += "" + this.theToken.value;
  if (this.tokPeekIs (269484209)) {
  this.tokenNext ();
  atomSpec += "'";
  }return this.generateResidueSpecCode (JS.T.tv (1048608, this.vwr.getJBR ().lookupSpecialAtomID (atomSpec.toUpperCase ()), atomSpec));
  });
  c$.errorString = Clazz.defineMethod (c$, "errorString", 
  function (iError, value, more, translated) {
  var doTranslate = false;
  if (!translated && (doTranslate = J.i18n.GT.getDoTranslate ()) == true) J.i18n.GT.setDoTranslate (false);
  var msg;
  switch (iError) {
  default:
  msg = "Unknown compiler error message number: " + iError;
  break;
  case 0:
  msg = J.i18n.GT._ ("bad argument count");
  break;
  case 1:
  msg = J.i18n.GT._ ("invalid context for {0}");
  break;
  case 2:
  msg = J.i18n.GT._ ("command expected");
  break;
  case 3:
  msg = J.i18n.GT._ ("{ number number number } expected");
  break;
  case 4:
  msg = J.i18n.GT._ ("unexpected end of script command");
  break;
  case 5:
  msg = J.i18n.GT._ ("end of expression expected");
  break;
  case 6:
  msg = J.i18n.GT._ ("identifier or residue specification expected");
  break;
  case 7:
  msg = J.i18n.GT._ ("invalid atom specification");
  break;
  case 8:
  msg = J.i18n.GT._ ("invalid chain specification");
  break;
  case 9:
  msg = J.i18n.GT._ ("invalid expression token: {0}");
  break;
  case 10:
  msg = J.i18n.GT._ ("invalid model specification");
  break;
  case 11:
  msg = J.i18n.GT._ ("missing END for {0}");
  break;
  case 12:
  msg = J.i18n.GT._ ("number expected");
  break;
  case 13:
  msg = J.i18n.GT._ ("number or variable name expected");
  break;
  case 14:
  msg = J.i18n.GT._ ("residue specification (ALA, AL?, A*) expected");
  break;
  case 15:
  msg = J.i18n.GT._ ("{0} expected");
  break;
  case 16:
  msg = J.i18n.GT._ ("{0} unexpected");
  break;
  case 17:
  msg = J.i18n.GT._ ("unrecognized expression token: {0}");
  break;
  case 18:
  msg = J.i18n.GT._ ("unrecognized {0} parameter");
  break;
  case 19:
  msg = J.i18n.GT._ ("unrecognized token: {0}");
  break;
  }
  if (msg.indexOf ("{0}") < 0) {
  if (value != null) msg += ": " + value;
  } else {
  msg = JU.PT.rep (msg, "{0}", value);
  if (msg.indexOf ("{1}") >= 0) msg = JU.PT.rep (msg, "{1}", more);
   else if (more != null) msg += ": " + more;
  }if (!translated) J.i18n.GT.setDoTranslate (doTranslate);
  return msg;
  }, "~N,~S,~S,~B");
  Clazz.defineMethod (c$, "commandExpected", 
  function () {
  this.ichToken = this.ichCurrentCommand;
  return this.error (2);
  });
  Clazz.defineMethod (c$, "error", 
  function (error) {
  return this.errorIntStr2 (error, null, null);
  }, "~N");
  Clazz.defineMethod (c$, "errorStr", 
  function (error, value) {
  return this.errorIntStr2 (error, value, null);
  }, "~N,~S");
  Clazz.defineMethod (c$, "errorIntStr2", 
  function (iError, value, more) {
  var strError = JS.ScriptTokenParser.errorString (iError, value, more, true);
  var strUntranslated = (J.i18n.GT.getDoTranslate () ? JS.ScriptTokenParser.errorString (iError, value, more, false) : null);
  return this.errorStr2 (strError, strUntranslated);
  }, "~N,~S,~S");
  Clazz.defineMethod (c$, "isError", 
   function () {
  return this.errorMessage != null;
  });
  Clazz.defineMethod (c$, "errorStr2", 
  function (errorMessage, strUntranslated) {
  this.errorMessage = errorMessage;
  this.errorMessageUntranslated = strUntranslated;
  return false;
  }, "~S,~S");
  Clazz.defineStatics (c$,
  "ERROR_badArgumentCount", 0,
  "ERROR_badContext", 1,
  "ERROR_commandExpected", 2,
  "ERROR_endOfCommandUnexpected", 4,
  "ERROR_invalidExpressionToken", 9,
  "ERROR_missingEnd", 11,
  "ERROR_tokenExpected", 15,
  "ERROR_tokenUnexpected", 16,
  "ERROR_unrecognizedParameter", 18,
  "ERROR_unrecognizedToken", 19,
  "ERROR_coordinateExpected", 3,
  "ERROR_endOfExpressionExpected", 5,
  "ERROR_identifierOrResidueSpecificationExpected", 6,
  "ERROR_invalidAtomSpecification", 7,
  "ERROR_invalidChainSpecification", 8,
  "ERROR_invalidModelSpecification", 10,
  "ERROR_numberExpected", 12,
  "ERROR_numberOrVariableNameExpected", 13,
  "ERROR_residueSpecificationExpected", 14,
  "ERROR_unrecognizedExpressionToken", 17);
  });
  