/* Generated By:JavaCC: Do not edit this line. FilterParserTokenManager.java */
package org.apache.sling.resource.filter.impl.script;
import java.util.ArrayList;
import java.util.List;
import org.apache.sling.resource.filter.impl.node.*;

/** Token Manager. */
public class FilterParserTokenManager implements FilterParserConstants
{

  /** Debug output. */
  public  java.io.PrintStream debugStream = System.out;
  /** Set debug output. */
  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
private final int jjStopStringLiteralDfa_0(int pos, long active0)
{
   switch (pos)
   {
      case 0:
         if ((active0 & 0x200000000L) != 0L)
         {
            jjmatchedKind = 32;
            return -1;
         }
         if ((active0 & 0x10000000000L) != 0L)
         {
            jjmatchedKind = 43;
            return 168;
         }
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            return 60;
         }
         if ((active0 & 0x4L) != 0L)
            return 60;
         if ((active0 & 0x80000000L) != 0L)
         {
            jjmatchedKind = 30;
            return -1;
         }
         if ((active0 & 0x20000800000L) != 0L)
         {
            jjmatchedKind = 43;
            return 58;
         }
         return -1;
      case 1:
         if ((active0 & 0x200000000L) != 0L)
         {
            if (jjmatchedPos == 0)
            {
               jjmatchedKind = 32;
               jjmatchedPos = 0;
            }
            return -1;
         }
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 1;
            return 57;
         }
         if ((active0 & 0x10000000000L) != 0L)
            return 60;
         if ((active0 & 0x80000000L) != 0L)
         {
            if (jjmatchedPos == 0)
            {
               jjmatchedKind = 30;
               jjmatchedPos = 0;
            }
            return -1;
         }
         if ((active0 & 0xf000800000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 1;
            return 60;
         }
         return -1;
      case 2:
         if ((active0 & 0x20000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
            return 56;
         }
         if ((active0 & 0xf000800000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 2;
            return 60;
         }
         return -1;
      case 3:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 3;
            return 60;
         }
         if ((active0 & 0x800000L) != 0L)
            return 60;
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return 55;
         }
         return -1;
      case 4:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 4;
            return 60;
         }
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return -1;
         }
         return -1;
      case 5:
         if ((active0 & 0x20000000000L) != 0L)
         {
            if (jjmatchedPos < 2)
            {
               jjmatchedKind = 43;
               jjmatchedPos = 2;
            }
            return -1;
         }
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 5;
            return 60;
         }
         return -1;
      case 6:
         if ((active0 & 0xf000000000L) != 0L)
         {
            jjmatchedKind = 43;
            jjmatchedPos = 6;
            return 60;
         }
         return -1;
      case 7:
         if ((active0 & 0xf000000000L) != 0L)
            return 60;
         return -1;
      default :
         return -1;
   }
}
private final int jjStartNfa_0(int pos, long active0)
{
   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
}
private int jjStopAtPos(int pos, int kind)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   return pos + 1;
}
private int jjMoveStringLiteralDfa0_0()
{
   switch(curChar)
   {
      case 9:
         return jjStartNfaWithStates_0(0, 2, 60);
      case 36:
         return jjStopAtPos(0, 42);
      case 40:
         return jjStopAtPos(0, 24);
      case 41:
         return jjStopAtPos(0, 25);
      case 44:
         return jjStopAtPos(0, 26);
      case 60:
         return jjMoveStringLiteralDfa1_0(0x200000000L);
      case 62:
         return jjMoveStringLiteralDfa1_0(0x80000000L);
      case 99:
         return jjMoveStringLiteralDfa1_0(0xf000000000L);
      case 105:
         return jjMoveStringLiteralDfa1_0(0x10000000000L);
      case 110:
         return jjMoveStringLiteralDfa1_0(0x20000800000L);
      default :
         return jjMoveNfa_0(0, 0);
   }
}
private int jjMoveStringLiteralDfa1_0(long active0)
{
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(0, active0);
      return 1;
   }
   switch(curChar)
   {
      case 61:
         if ((active0 & 0x80000000L) != 0L)
            return jjStopAtPos(1, 31);
         else if ((active0 & 0x200000000L) != 0L)
            return jjStopAtPos(1, 33);
         break;
      case 110:
         if ((active0 & 0x10000000000L) != 0L)
            return jjStartNfaWithStates_0(1, 40, 60);
         break;
      case 111:
         return jjMoveStringLiteralDfa2_0(active0, 0x2f000000000L);
      case 117:
         return jjMoveStringLiteralDfa2_0(active0, 0x800000L);
      default :
         break;
   }
   return jjStartNfa_0(0, active0);
}
private int jjMoveStringLiteralDfa2_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(0, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(1, active0);
      return 2;
   }
   switch(curChar)
   {
      case 108:
         return jjMoveStringLiteralDfa3_0(active0, 0x800000L);
      case 110:
         return jjMoveStringLiteralDfa3_0(active0, 0xf000000000L);
      case 116:
         return jjMoveStringLiteralDfa3_0(active0, 0x20000000000L);
      default :
         break;
   }
   return jjStartNfa_0(1, active0);
}
private int jjMoveStringLiteralDfa3_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(1, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(2, active0);
      return 3;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa4_0(active0, 0x20000000000L);
      case 108:
         if ((active0 & 0x800000L) != 0L)
            return jjStartNfaWithStates_0(3, 23, 60);
         break;
      case 116:
         return jjMoveStringLiteralDfa4_0(active0, 0xf000000000L);
      default :
         break;
   }
   return jjStartNfa_0(2, active0);
}
private int jjMoveStringLiteralDfa4_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(2, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(3, active0);
      return 4;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa5_0(active0, 0xf000000000L);
      case 105:
         return jjMoveStringLiteralDfa5_0(active0, 0x20000000000L);
      default :
         break;
   }
   return jjStartNfa_0(3, active0);
}
private int jjMoveStringLiteralDfa5_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(3, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(4, active0);
      return 5;
   }
   switch(curChar)
   {
      case 105:
         return jjMoveStringLiteralDfa6_0(active0, 0xf000000000L);
      case 110:
         if ((active0 & 0x20000000000L) != 0L)
            return jjStopAtPos(5, 41);
         break;
      default :
         break;
   }
   return jjStartNfa_0(4, active0);
}
private int jjMoveStringLiteralDfa6_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(4, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(5, active0);
      return 6;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa7_0(active0, 0xf000000000L);
      default :
         break;
   }
   return jjStartNfa_0(5, active0);
}
private int jjMoveStringLiteralDfa7_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(5, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(6, active0);
      return 7;
   }
   switch(curChar)
   {
      case 115:
         if ((active0 & 0x1000000000L) != 0L)
         {
            jjmatchedKind = 36;
            jjmatchedPos = 7;
         }
         return jjMoveStringLiteralDfa8_0(active0, 0xe000000000L);
      default :
         break;
   }
   return jjStartNfa_0(6, active0);
}
private int jjMoveStringLiteralDfa8_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(6, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(7, active0);
      return 8;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa9_0(active0, 0xe000000000L);
      default :
         break;
   }
   return jjStartNfa_0(7, active0);
}
private int jjMoveStringLiteralDfa9_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(7, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(8, active0);
      return 9;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa10_0(active0, 0x4000000000L);
      case 110:
         return jjMoveStringLiteralDfa10_0(active0, 0xa000000000L);
      default :
         break;
   }
   return jjStartNfa_0(8, active0);
}
private int jjMoveStringLiteralDfa10_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(8, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(9, active0);
      return 10;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa11_0(active0, 0x4000000000L);
      case 111:
         return jjMoveStringLiteralDfa11_0(active0, 0xa000000000L);
      default :
         break;
   }
   return jjStartNfa_0(9, active0);
}
private int jjMoveStringLiteralDfa11_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(9, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(10, active0);
      return 11;
   }
   switch(curChar)
   {
      case 116:
         if ((active0 & 0x2000000000L) != 0L)
         {
            jjmatchedKind = 37;
            jjmatchedPos = 11;
         }
         return jjMoveStringLiteralDfa12_0(active0, 0x8000000000L);
      case 121:
         if ((active0 & 0x4000000000L) != 0L)
            return jjStopAtPos(11, 38);
         break;
      default :
         break;
   }
   return jjStartNfa_0(10, active0);
}
private int jjMoveStringLiteralDfa12_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(10, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(11, active0);
      return 12;
   }
   switch(curChar)
   {
      case 32:
         return jjMoveStringLiteralDfa13_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(11, active0);
}
private int jjMoveStringLiteralDfa13_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(11, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(12, active0);
      return 13;
   }
   switch(curChar)
   {
      case 97:
         return jjMoveStringLiteralDfa14_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(12, active0);
}
private int jjMoveStringLiteralDfa14_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(12, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(13, active0);
      return 14;
   }
   switch(curChar)
   {
      case 110:
         return jjMoveStringLiteralDfa15_0(active0, 0x8000000000L);
      default :
         break;
   }
   return jjStartNfa_0(13, active0);
}
private int jjMoveStringLiteralDfa15_0(long old0, long active0)
{
   if (((active0 &= old0)) == 0L)
      return jjStartNfa_0(13, old0);
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) {
      jjStopStringLiteralDfa_0(14, active0);
      return 15;
   }
   switch(curChar)
   {
      case 121:
         if ((active0 & 0x8000000000L) != 0L)
            return jjStopAtPos(15, 39);
         break;
      default :
         break;
   }
   return jjStartNfa_0(14, active0);
}
private int jjStartNfaWithStates_0(int pos, int kind, int state)
{
   jjmatchedKind = kind;
   jjmatchedPos = pos;
   try { curChar = input_stream.readChar(); }
   catch(java.io.IOException e) { return pos + 1; }
   return jjMoveNfa_0(state, pos + 1);
}
static final long[] jjbitVec0 = {
   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
};
static final long[] jjbitVec2 = {
   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
};
private int jjMoveNfa_0(int startState, int curPos)
{
   int startsAt = 0;
   jjnewStateCnt = 193;
   int i = 1;
   jjstateSet[0] = startState;
   int kind = 0x7fffffff;
   for (;;)
   {
      if (++jjround == 0x7fffffff)
         ReInitRounds();
      if (curChar < 64)
      {
         long l = 1L << curChar;
         do
         {
            switch(jjstateSet[--i])
            {
               case 57:
               case 60:
                  if ((0x8c00846affffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 0:
                  if ((0x8c00846affffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if ((0x3ff000000000000L & l) != 0L)
                  {
                     if (kind > 13)
                        kind = 13;
                     jjCheckNAddStates(0, 14);
                  }
                  else if (curChar == 45)
                     jjCheckNAddStates(15, 22);
                  else if (curChar == 60)
                  {
                     if (kind > 32)
                        kind = 32;
                  }
                  else if (curChar == 62)
                  {
                     if (kind > 30)
                        kind = 30;
                  }
                  else if (curChar == 61)
                     jjstateSet[jjnewStateCnt++] = 32;
                  else if (curChar == 34)
                     jjCheckNAddStates(23, 25);
                  else if (curChar == 39)
                     jjCheckNAddStates(26, 28);
                  else if (curChar == 46)
                     jjCheckNAdd(1);
                  if (curChar == 33)
                     jjstateSet[jjnewStateCnt++] = 34;
                  else if (curChar == 38)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 168:
                  if ((0x8c00846affffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 56:
                  if ((0x8c00846affffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 55;
                  break;
               case 58:
                  if ((0x8c00846affffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 1:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 15)
                     kind = 15;
                  jjCheckNAdd(1);
                  break;
               case 3:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(4);
                  break;
               case 4:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 16)
                     kind = 16;
                  jjCheckNAdd(4);
                  break;
               case 5:
                  if (curChar == 39)
                     jjCheckNAddStates(26, 28);
                  break;
               case 7:
                  jjCheckNAddStates(26, 28);
                  break;
               case 8:
                  if ((0xffffff7fffffffffL & l) != 0L)
                     jjCheckNAddStates(26, 28);
                  break;
               case 9:
                  if (curChar == 39 && kind > 18)
                     kind = 18;
                  break;
               case 10:
                  if (curChar == 34)
                     jjCheckNAddStates(23, 25);
                  break;
               case 12:
                  jjCheckNAddStates(23, 25);
                  break;
               case 13:
                  if ((0xfffffffbffffffffL & l) != 0L)
                     jjCheckNAddStates(23, 25);
                  break;
               case 14:
                  if (curChar == 34 && kind > 18)
                     kind = 18;
                  break;
               case 15:
                  if (curChar == 38 && kind > 21)
                     kind = 21;
                  break;
               case 16:
                  if (curChar == 38)
                     jjstateSet[jjnewStateCnt++] = 15;
                  break;
               case 32:
                  if (curChar == 61 && kind > 28)
                     kind = 28;
                  break;
               case 33:
                  if (curChar == 61)
                     jjstateSet[jjnewStateCnt++] = 32;
                  break;
               case 34:
                  if (curChar == 61 && kind > 29)
                     kind = 29;
                  break;
               case 35:
                  if (curChar == 33)
                     jjstateSet[jjnewStateCnt++] = 34;
                  break;
               case 36:
                  if (curChar == 62 && kind > 30)
                     kind = 30;
                  break;
               case 41:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 40;
                  break;
               case 49:
                  if (curChar == 60 && kind > 32)
                     kind = 32;
                  break;
               case 50:
                  if (curChar == 61 && kind > 34)
                     kind = 34;
                  break;
               case 63:
               case 64:
                  jjCheckNAddStates(29, 31);
                  break;
               case 66:
                  if (curChar == 45)
                     jjCheckNAddStates(15, 22);
                  break;
               case 67:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(68, 102);
                  break;
               case 68:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 69;
                  break;
               case 69:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(70, 101);
                  break;
               case 70:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 71;
                  break;
               case 71:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(72, 100);
                  break;
               case 72:
                  if (curChar == 45)
                     jjCheckNAdd(73);
                  break;
               case 73:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(73, 74);
                  break;
               case 74:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 75;
                  break;
               case 75:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(76, 77);
                  break;
               case 76:
                  if (curChar == 45)
                     jjCheckNAdd(77);
                  break;
               case 77:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(77, 78);
                  break;
               case 78:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 79;
                  break;
               case 79:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 80;
                  break;
               case 80:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 81;
                  break;
               case 82:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 83;
                  break;
               case 83:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 84;
                  break;
               case 84:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 85;
                  break;
               case 85:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 86;
                  break;
               case 86:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(87, 94);
                  break;
               case 87:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 88;
                  break;
               case 88:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 89;
                  break;
               case 89:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(90, 94);
                  break;
               case 90:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 91;
                  break;
               case 91:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 92;
                  break;
               case 92:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 93;
                  break;
               case 93:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAdd(94);
                  break;
               case 94:
                  if ((0x280000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 95;
                  break;
               case 95:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 96;
                  break;
               case 96:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 97;
                  break;
               case 97:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 98;
                  break;
               case 98:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 99;
                  break;
               case 99:
                  if ((0x3ff000000000000L & l) != 0L && kind > 10)
                     kind = 10;
                  break;
               case 100:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(32, 35);
                  break;
               case 101:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(36, 39);
                  break;
               case 102:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(40, 43);
                  break;
               case 103:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(104, 132);
                  break;
               case 104:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 105;
                  break;
               case 105:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(106, 131);
                  break;
               case 106:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 107;
                  break;
               case 107:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(108, 130);
                  break;
               case 108:
                  if (curChar == 45)
                     jjCheckNAdd(109);
                  break;
               case 109:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(109, 110);
                  break;
               case 110:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 111;
                  break;
               case 111:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(112, 113);
                  break;
               case 112:
                  if (curChar == 45)
                     jjCheckNAdd(113);
                  break;
               case 113:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(113, 114);
                  break;
               case 114:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 115;
                  break;
               case 115:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 116;
                  break;
               case 116:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 117;
                  break;
               case 118:
                  if ((0x7000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 119;
                  break;
               case 119:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 120;
                  break;
               case 120:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 121;
                  break;
               case 121:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 122;
                  break;
               case 122:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 11)
                     kind = 11;
                  jjstateSet[jjnewStateCnt++] = 123;
                  break;
               case 123:
                  if (curChar == 58)
                     jjstateSet[jjnewStateCnt++] = 124;
                  break;
               case 124:
                  if ((0x3f000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 125;
                  break;
               case 125:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 11)
                     kind = 11;
                  jjstateSet[jjnewStateCnt++] = 126;
                  break;
               case 126:
                  if (curChar == 46)
                     jjstateSet[jjnewStateCnt++] = 127;
                  break;
               case 127:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 128;
                  break;
               case 128:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 129;
                  break;
               case 129:
                  if ((0x3ff000000000000L & l) != 0L && kind > 11)
                     kind = 11;
                  break;
               case 130:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(44, 47);
                  break;
               case 131:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(48, 51);
                  break;
               case 132:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(52, 55);
                  break;
               case 133:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(134, 149);
                  break;
               case 134:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 135;
                  break;
               case 135:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(136, 148);
                  break;
               case 136:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 137;
                  break;
               case 137:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(138, 147);
                  break;
               case 138:
                  if (curChar == 45)
                     jjCheckNAdd(139);
                  break;
               case 139:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(139, 140);
                  break;
               case 140:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 141;
                  break;
               case 141:
                  if ((0x3000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(142, 143);
                  break;
               case 142:
                  if (curChar == 45)
                     jjCheckNAdd(143);
                  break;
               case 143:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(143, 144);
                  break;
               case 144:
                  if (curChar == 45)
                     jjstateSet[jjnewStateCnt++] = 145;
                  break;
               case 145:
                  if ((0xf000000000000L & l) != 0L)
                     jjstateSet[jjnewStateCnt++] = 146;
                  break;
               case 146:
                  if ((0x3ff000000000000L & l) != 0L && kind > 12)
                     kind = 12;
                  break;
               case 147:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(56, 59);
                  break;
               case 148:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(60, 63);
                  break;
               case 149:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddStates(64, 67);
                  break;
               case 150:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(150);
                  break;
               case 151:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(151, 152);
                  break;
               case 152:
                  if (curChar == 46)
                     jjCheckNAdd(153);
                  break;
               case 153:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(153);
                  break;
               case 154:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(154, 155);
                  break;
               case 156:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(157);
                  break;
               case 157:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(157);
                  break;
               case 158:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(158, 159);
                  break;
               case 159:
                  if (curChar == 46)
                     jjCheckNAdd(160);
                  break;
               case 160:
                  if ((0x3ff000000000000L & l) != 0L)
                     jjCheckNAddTwoStates(160, 161);
                  break;
               case 162:
                  if ((0x280000000000L & l) != 0L)
                     jjCheckNAdd(163);
                  break;
               case 163:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAdd(163);
                  break;
               case 164:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 14)
                     kind = 14;
                  jjCheckNAdd(164);
                  break;
               case 165:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 13)
                     kind = 13;
                  jjCheckNAddStates(0, 14);
                  break;
               case 166:
                  if ((0x3ff000000000000L & l) == 0L)
                     break;
                  if (kind > 17)
                     kind = 17;
                  jjCheckNAdd(166);
                  break;
               case 172:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 171;
                  break;
               case 179:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 178;
                  break;
               case 189:
                  if (curChar == 32)
                     jjstateSet[jjnewStateCnt++] = 188;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else if (curChar < 128)
      {
         long l = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 57:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 56;
                  break;
               case 0:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  else if (curChar == 91)
                     jjCheckNAddStates(29, 31);
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(68, 69);
                  else if (curChar == 108)
                     jjAddStates(70, 72);
                  else if (curChar == 105)
                     jjAddStates(73, 74);
                  else if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 58;
                  else if (curChar == 126)
                     jjstateSet[jjnewStateCnt++] = 50;
                  else if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 47;
                  else if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 30;
                  else if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 26;
                  else if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 22;
                  else if (curChar == 124)
                     jjstateSet[jjnewStateCnt++] = 20;
                  else if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 18;
                  break;
               case 168:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 172;
                  if (curChar == 115)
                  {
                     if (kind > 28)
                        kind = 28;
                  }
                  break;
               case 56:
               case 60:
                  if ((0xffffffffd7ffffffL & l) == 0L)
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 58:
                  if ((0xffffffffd7ffffffL & l) != 0L)
                  {
                     if (kind > 43)
                        kind = 43;
                     jjCheckNAdd(60);
                  }
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 57;
                  break;
               case 2:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(68, 69);
                  break;
               case 6:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 7;
                  break;
               case 7:
                  jjCheckNAddStates(26, 28);
                  break;
               case 8:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(26, 28);
                  break;
               case 11:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 12;
                  break;
               case 12:
                  jjCheckNAddStates(23, 25);
                  break;
               case 13:
                  if ((0xffffffffefffffffL & l) != 0L)
                     jjCheckNAddStates(23, 25);
                  break;
               case 17:
                  if (curChar == 100 && kind > 21)
                     kind = 21;
                  break;
               case 18:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 17;
                  break;
               case 19:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 18;
                  break;
               case 20:
                  if (curChar == 124 && kind > 22)
                     kind = 22;
                  break;
               case 21:
                  if (curChar == 124)
                     jjstateSet[jjnewStateCnt++] = 20;
                  break;
               case 22:
                  if (curChar == 114 && kind > 22)
                     kind = 22;
                  break;
               case 23:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 22;
                  break;
               case 24:
                  if (curChar == 101 && kind > 27)
                     kind = 27;
                  break;
               case 25:
                  if (curChar == 117)
                     jjCheckNAdd(24);
                  break;
               case 26:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 25;
                  break;
               case 27:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 26;
                  break;
               case 28:
                  if (curChar == 115)
                     jjCheckNAdd(24);
                  break;
               case 29:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 28;
                  break;
               case 30:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 29;
                  break;
               case 31:
                  if (curChar == 102)
                     jjstateSet[jjnewStateCnt++] = 30;
                  break;
               case 37:
                  if (curChar == 110 && kind > 30)
                     kind = 30;
                  break;
               case 38:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 37;
                  break;
               case 39:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 38;
                  break;
               case 40:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 39;
                  break;
               case 42:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 41;
                  break;
               case 43:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 42;
                  break;
               case 44:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 43;
                  break;
               case 45:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 44;
                  break;
               case 46:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 45;
                  break;
               case 47:
                  if (curChar == 114)
                     jjstateSet[jjnewStateCnt++] = 46;
                  break;
               case 48:
                  if (curChar == 103)
                     jjstateSet[jjnewStateCnt++] = 47;
                  break;
               case 51:
                  if (curChar == 126)
                     jjstateSet[jjnewStateCnt++] = 50;
                  break;
               case 52:
                  if (curChar == 101 && kind > 35)
                     kind = 35;
                  break;
               case 53:
                  if (curChar == 107)
                     jjstateSet[jjnewStateCnt++] = 52;
                  break;
               case 54:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 53;
                  break;
               case 55:
                  if (curChar == 108)
                     jjstateSet[jjnewStateCnt++] = 54;
                  break;
               case 59:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 58;
                  break;
               case 61:
                  if (curChar == 91)
                     jjCheckNAddStates(29, 31);
                  break;
               case 62:
                  if (curChar == 92)
                     jjstateSet[jjnewStateCnt++] = 63;
                  break;
               case 63:
                  jjCheckNAddStates(29, 31);
                  break;
               case 64:
                  if ((0xffffffffcfffffffL & l) != 0L)
                     jjCheckNAddStates(29, 31);
                  break;
               case 65:
                  if (curChar == 93 && kind > 44)
                     kind = 44;
                  break;
               case 81:
                  if (curChar == 84)
                     jjstateSet[jjnewStateCnt++] = 82;
                  break;
               case 117:
                  if (curChar == 84)
                     jjstateSet[jjnewStateCnt++] = 118;
                  break;
               case 155:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(75, 76);
                  break;
               case 161:
                  if ((0x2000000020L & l) != 0L)
                     jjAddStates(77, 78);
                  break;
               case 167:
                  if (curChar == 105)
                     jjAddStates(73, 74);
                  break;
               case 169:
                  if (curChar == 116 && kind > 29)
                     kind = 29;
                  break;
               case 170:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 169;
                  break;
               case 171:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 170;
                  break;
               case 173:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 172;
                  break;
               case 174:
                  if (curChar == 108)
                     jjAddStates(70, 72);
                  break;
               case 175:
                  if (curChar == 110 && kind > 32)
                     kind = 32;
                  break;
               case 176:
                  if (curChar == 97)
                     jjstateSet[jjnewStateCnt++] = 175;
                  break;
               case 177:
                  if (curChar == 104)
                     jjstateSet[jjnewStateCnt++] = 176;
                  break;
               case 178:
                  if (curChar == 116)
                     jjstateSet[jjnewStateCnt++] = 177;
                  break;
               case 180:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 179;
                  break;
               case 181:
                  if (curChar == 115)
                     jjstateSet[jjnewStateCnt++] = 180;
                  break;
               case 182:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 181;
                  break;
               case 183:
                  if (curChar == 101 && kind > 34)
                     kind = 34;
                  break;
               case 184:
                  if (curChar == 107)
                     jjstateSet[jjnewStateCnt++] = 183;
                  break;
               case 185:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 184;
                  break;
               case 186:
                  if (curChar == 116 && kind > 35)
                     kind = 35;
                  break;
               case 187:
                  if (curChar == 111)
                     jjstateSet[jjnewStateCnt++] = 186;
                  break;
               case 188:
                  if (curChar == 110)
                     jjstateSet[jjnewStateCnt++] = 187;
                  break;
               case 190:
                  if (curChar == 101)
                     jjstateSet[jjnewStateCnt++] = 189;
                  break;
               case 191:
                  if (curChar == 107)
                     jjstateSet[jjnewStateCnt++] = 190;
                  break;
               case 192:
                  if (curChar == 105)
                     jjstateSet[jjnewStateCnt++] = 191;
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      else
      {
         int hiByte = (int)(curChar >> 8);
         int i1 = hiByte >> 6;
         long l1 = 1L << (hiByte & 077);
         int i2 = (curChar & 0xff) >> 6;
         long l2 = 1L << (curChar & 077);
         do
         {
            switch(jjstateSet[--i])
            {
               case 57:
               case 60:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 0:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 168:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 56:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 58:
                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                     break;
                  if (kind > 43)
                     kind = 43;
                  jjCheckNAdd(60);
                  break;
               case 7:
               case 8:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(26, 28);
                  break;
               case 12:
               case 13:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(23, 25);
                  break;
               case 63:
               case 64:
                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                     jjCheckNAddStates(29, 31);
                  break;
               default : break;
            }
         } while(i != startsAt);
      }
      if (kind != 0x7fffffff)
      {
         jjmatchedKind = kind;
         jjmatchedPos = curPos;
         kind = 0x7fffffff;
      }
      ++curPos;
      if ((i = jjnewStateCnt) == (startsAt = 193 - (jjnewStateCnt = startsAt)))
         return curPos;
      try { curChar = input_stream.readChar(); }
      catch(java.io.IOException e) { return curPos; }
   }
}
static final int[] jjnextStates = {
   68, 104, 134, 150, 151, 152, 154, 155, 158, 159, 164, 166, 149, 132, 102, 67, 
   103, 133, 150, 151, 154, 158, 164, 11, 13, 14, 6, 8, 9, 62, 64, 65, 
   72, 73, 74, 100, 70, 72, 100, 101, 68, 70, 101, 102, 108, 109, 110, 130, 
   106, 108, 130, 131, 104, 106, 131, 132, 138, 139, 140, 147, 136, 138, 147, 148, 
   134, 136, 148, 149, 3, 4, 182, 185, 192, 168, 173, 156, 157, 162, 163, 
};
private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
{
   switch(hiByte)
   {
      case 0:
         return ((jjbitVec2[i2] & l2) != 0L);
      default :
         if ((jjbitVec0[i1] & l1) != 0L)
            return true;
         return false;
   }
}

/** Token literal values. */
public static final String[] jjstrLiteralImages = {
"", null, null, null, null, null, null, null, null, null, null, null, null, 
null, null, null, null, null, null, null, null, null, null, "\156\165\154\154", 
"\50", "\51", "\54", null, null, null, null, "\76\75", null, "\74\75", null, null, 
"\143\157\156\164\141\151\156\163", "\143\157\156\164\141\151\156\163\40\156\157\164", 
"\143\157\156\164\141\151\156\163\40\141\156\171", "\143\157\156\164\141\151\156\163\40\156\157\164\40\141\156\171", "\151\156", 
"\156\157\164\40\151\156", "\44", null, null, null, };

/** Lexer state names. */
public static final String[] lexStateNames = {
   "DEFAULT",
};
static final long[] jjtoToken = {
   0x3fffffe7fc01L, 
};
static final long[] jjtoSkip = {
   0x6L, 
};
protected SimpleCharStream input_stream;
private final int[] jjrounds = new int[193];
private final int[] jjstateSet = new int[386];
private final StringBuilder jjimage = new StringBuilder();
private StringBuilder image = jjimage;
private int jjimageLen;
private int lengthOfMatch;
protected char curChar;
/** Constructor. */
public FilterParserTokenManager(SimpleCharStream stream){
   if (SimpleCharStream.staticFlag)
      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
   input_stream = stream;
}

/** Constructor. */
public FilterParserTokenManager(SimpleCharStream stream, int lexState){
   this(stream);
   SwitchTo(lexState);
}

/** Reinitialise parser. */
public void ReInit(SimpleCharStream stream)
{
   jjmatchedPos = jjnewStateCnt = 0;
   curLexState = defaultLexState;
   input_stream = stream;
   ReInitRounds();
}
private void ReInitRounds()
{
   int i;
   jjround = 0x80000001;
   for (i = 193; i-- > 0;)
      jjrounds[i] = 0x80000000;
}

/** Reinitialise parser. */
public void ReInit(SimpleCharStream stream, int lexState)
{
   ReInit(stream);
   SwitchTo(lexState);
}

/** Switch to specified lex state. */
public void SwitchTo(int lexState)
{
   if (lexState >= 1 || lexState < 0)
      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
   else
      curLexState = lexState;
}

protected Token jjFillToken()
{
   final Token t;
   final String curTokenImage;
   final int beginLine;
   final int endLine;
   final int beginColumn;
   final int endColumn;
   String im = jjstrLiteralImages[jjmatchedKind];
   curTokenImage = (im == null) ? input_stream.GetImage() : im;
   beginLine = input_stream.getBeginLine();
   beginColumn = input_stream.getBeginColumn();
   endLine = input_stream.getEndLine();
   endColumn = input_stream.getEndColumn();
   t = Token.newToken(jjmatchedKind, curTokenImage);

   t.beginLine = beginLine;
   t.endLine = endLine;
   t.beginColumn = beginColumn;
   t.endColumn = endColumn;

   return t;
}

int curLexState = 0;
int defaultLexState = 0;
int jjnewStateCnt;
int jjround;
int jjmatchedPos;
int jjmatchedKind;

/** Get the next Token. */
public Token getNextToken() 
{
  Token matchedToken;
  int curPos = 0;

  EOFLoop :
  for (;;)
  {
   try
   {
      curChar = input_stream.BeginToken();
   }
   catch(java.io.IOException e)
   {
      jjmatchedKind = 0;
      matchedToken = jjFillToken();
      return matchedToken;
   }
   image = jjimage;
   image.setLength(0);
   jjimageLen = 0;

   try { input_stream.backup(0);
      while (curChar <= 32 && (0x100000000L & (1L << curChar)) != 0L)
         curChar = input_stream.BeginToken();
   }
   catch (java.io.IOException e1) { continue EOFLoop; }
   jjmatchedKind = 0x7fffffff;
   jjmatchedPos = 0;
   curPos = jjMoveStringLiteralDfa0_0();
   if (jjmatchedPos == 0 && jjmatchedKind > 45)
   {
      jjmatchedKind = 45;
   }
   if (jjmatchedKind != 0x7fffffff)
   {
      if (jjmatchedPos + 1 < curPos)
         input_stream.backup(curPos - jjmatchedPos - 1);
      if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
      {
         matchedToken = jjFillToken();
         TokenLexicalActions(matchedToken);
         return matchedToken;
      }
      else
      {
         continue EOFLoop;
      }
   }
   int error_line = input_stream.getEndLine();
   int error_column = input_stream.getEndColumn();
   String error_after = null;
   boolean EOFSeen = false;
   try { input_stream.readChar(); input_stream.backup(1); }
   catch (java.io.IOException e1) {
      EOFSeen = true;
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
      if (curChar == '\n' || curChar == '\r') {
         error_line++;
         error_column = 0;
      }
      else
         error_column++;
   }
   if (!EOFSeen) {
      input_stream.backup(1);
      error_after = curPos <= 1 ? "" : input_stream.GetImage();
   }
   throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
  }
}

void TokenLexicalActions(Token matchedToken)
{
   switch(jjmatchedKind)
   {
      case 18 :
        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
                                       matchedToken.image = image.substring(1, lengthOfMatch - 1);
         break;
      case 44 :
        image.append(input_stream.GetSuffix(jjimageLen + (lengthOfMatch = jjmatchedPos + 1)));
                                                        matchedToken.image = image.substring(1, lengthOfMatch - 1);
         break;
      default :
         break;
   }
}
private void jjCheckNAdd(int state)
{
   if (jjrounds[state] != jjround)
   {
      jjstateSet[jjnewStateCnt++] = state;
      jjrounds[state] = jjround;
   }
}
private void jjAddStates(int start, int end)
{
   do {
      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
   } while (start++ != end);
}
private void jjCheckNAddTwoStates(int state1, int state2)
{
   jjCheckNAdd(state1);
   jjCheckNAdd(state2);
}

private void jjCheckNAddStates(int start, int end)
{
   do {
      jjCheckNAdd(jjnextStates[start]);
   } while (start++ != end);
}

}
