/* Generated By:JavaCC: Do not edit this line. DSigParser.java */
package w3c.pics.parser;

import java.io.*;
import java.util.*;

public class DSigParser implements DSigParserConstants {

    public static void main(String args[]) throws ParseError {
         try {
             FileInputStream input = new FileInputStream(args[1]);
             DSigParser parser = new DSigParser(input);
             Vector top = new Vector();
             if (args[0].equals("-resinfo"))
                 parser.resInfo(top);
             else
                 parser.sigExt(top);
             System.out.println(top);
         }
         catch (IOException e) {
             System.out.println("I/O Error");
         }
    }

/* This is the entry procedure for SigBlocks */
  static final public void sigExt(Vector top) throws ParseError {
         Vector retval = null;
    retval = AttributionInfo();
             top.addElement(retval);
    label_1:
    while (true) {
      if (jj_mask_0[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[0] = jj_gen;
        break label_1;
      }
      retval = Signature();
             top.addElement(retval);
    }
  }

  static boolean[] jj_mask_0 = new boolean[42];
  static {
    jj_mask_0[L_PAREN] = true;
  }
  
  static final public Vector AttributionInfo() throws ParseError {
         Vector retval = new Vector();
         Token thetoken = null;
         Vector cvector = null;
    jj_consume_token(L_PAREN);
    jj_consume_token(DQUOTE);
    thetoken = jj_consume_token(ATTRIB_INFO);
             retval.addElement(thetoken.image);
    jj_consume_token(DQUOTE);
    label_2:
    while (true) {
      if (jj_mask_1[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[1] = jj_gen;
        break label_2;
      }
      cvector = Certificate();
             retval.addElement(cvector);
    }
    jj_consume_token(R_PAREN);
             return retval;
  }

  static boolean[] jj_mask_1 = new boolean[42];
  static {
    jj_mask_1[L_PAREN] = true;
  }
  
  static final public Vector Certificate() throws ParseError {
         Vector retval = new Vector();
         String rstring = null;
    jj_consume_token(L_PAREN);
    rstring = CertificateFamilyID();
             retval.addElement(rstring);
    rstring = CertificateData();
             retval.addElement(rstring);
    jj_consume_token(R_PAREN);
             return retval;
  }

  static final public String CertificateFamilyID() throws ParseError {
         String retval = null;
    retval = quotedURL();
             return retval;
  }

  static final public String CertificateData() throws ParseError {
         String retval = null;
    if (jj_2_1(2147483647)) {
      retval = quotedBase64String();
             return retval;
    } else {
      if (jj_mask_2[getToken(1).kind]) {
        retval = quotedURL();
             return retval;
      } else {
        jj_expLA1[2] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
  }

  static boolean[] jj_mask_2 = new boolean[42];
  static {
    jj_mask_2[DQUOTE] = true;
  }
  
  static final public Vector Signature() throws ParseError {
         Vector retval = new Vector();
         String rstring = null;
         Vector rvector = null;
         Token thetoken = null;
    jj_consume_token(L_PAREN);
    jj_consume_token(DQUOTE);
    thetoken = jj_consume_token(SIGNATURE);
             retval.addElement(thetoken.image);
    jj_consume_token(DQUOTE);
    rstring = SignatureSuiteID();
             retval.addElement(rstring);
    label_3:
    while (true) {
      rvector = SigData();
             retval.addElement(rvector);
      if (jj_mask_3[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[3] = jj_gen;
        break label_3;
      }
    }
    jj_consume_token(R_PAREN);
             return retval;
  }

  static boolean[] jj_mask_3 = new boolean[42];
  static {
    jj_mask_3[L_PAREN] = true;
  }
  
  static final public String SignatureSuiteID() throws ParseError {
         String retval = null;
    retval = quotedURL();
             return retval;
  }

  static final public Vector SigData() throws ParseError {
         Vector retval = new Vector();
         String rstring = null;
         Vector rvector = null;
    jj_consume_token(L_PAREN);
    rstring = SigTokenString();
             retval.addElement(rstring);
    rvector = SigInfo();
             if ((rvector.size()==1) &&
                 (rvector.firstElement() instanceof String))
                 retval.addElement(rvector.firstElement().toString());
             else
                 retval.addElement(rvector);
    jj_consume_token(R_PAREN);
             return retval;
  }

  static final public String SigTokenString() throws ParseError {
         String retval = null;
    retval = quotedName();
             return retval;
  }

  static final public Vector SigInfo() throws ParseError {
         Vector retval = null;
         String rstring = null;
    if (jj_mask_5[getToken(1).kind]) {
      rstring = SigInfoString();
             retval = new Vector();
             retval.addElement(rstring);
             return retval;
    } else {
      jj_expLA1[5] = jj_gen;
      if (jj_mask_4[getToken(1).kind]) {
        retval = SigInfoVector();
             return retval;
      } else {
        jj_expLA1[4] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
  }

  static boolean[] jj_mask_4 = new boolean[42];
  static {
    jj_mask_4[L_PAREN] = true;
  }
  static boolean[] jj_mask_5 = new boolean[42];
  static {
    jj_mask_5[DIGIT] =
    jj_mask_5[DQUOTE] =
    jj_mask_5[MINUS] =
    jj_mask_5[PLUS] = true;
  }
  
  static final public String SigInfoString() throws ParseError {
         String retval = null;
    if (jj_2_4(2147483647)) {
      retval = quotedISOdate();
    } else {
      if (jj_2_3(2147483647)) {
        retval = quotedBase64String();
      } else {
        if (jj_2_2(2147483647)) {
          retval = quotedURL();
        } else {
          if (jj_mask_7[getToken(1).kind]) {
            retval = quotedName();
          } else {
            jj_expLA1[7] = jj_gen;
            if (jj_mask_6[getToken(1).kind]) {
              retval = number();
            } else {
              jj_expLA1[6] = jj_gen;
              jj_consume_token(-1);
              throw new ParseError();
            }
          }
        }
      }
    }
             return retval;
  }

  static boolean[] jj_mask_6 = new boolean[42];
  static {
    jj_mask_6[DIGIT] =
    jj_mask_6[MINUS] =
    jj_mask_6[PLUS] = true;
  }
  static boolean[] jj_mask_7 = new boolean[42];
  static {
    jj_mask_7[DQUOTE] = true;
  }
  
  static final public Vector SigInfoVector() throws ParseError {
         Vector retval = new Vector();
         Vector rvector = null;
    if (jj_2_5(2147483647)) {
      retval = SigData();
             return retval;
    } else {
      if (jj_mask_9[getToken(1).kind]) {
        jj_consume_token(L_PAREN);
        label_4:
        while (true) {
          rvector = SigInfo();
                 retval.addElement(rvector);
          if (jj_mask_8[getToken(1).kind]) {
            ;
          } else {
            jj_expLA1[8] = jj_gen;
            break label_4;
          }
        }
        jj_consume_token(R_PAREN);
             return retval;
      } else {
        jj_expLA1[9] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
  }

  static boolean[] jj_mask_8 = new boolean[42];
  static {
    jj_mask_8[DIGIT] =
    jj_mask_8[L_PAREN] =
    jj_mask_8[DQUOTE] =
    jj_mask_8[MINUS] =
    jj_mask_8[PLUS] = true;
  }
  static boolean[] jj_mask_9 = new boolean[42];
  static {
    jj_mask_9[L_PAREN] = true;
  }
  
  static final public String quotedURL() throws ParseError {
         String retval = null;
    jj_consume_token(DQUOTE);
    retval = URL();
    jj_consume_token(DQUOTE);
             return retval;
  }

  static final public String URL() throws ParseError {
         String temp = null;
         String retval = new String("");
    label_5:
    while (true) {
      temp = urlchar();
             retval+=temp;
      if (jj_mask_10[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[10] = jj_gen;
        break label_5;
      }
    }
             return retval;
  }

  static boolean[] jj_mask_10 = new boolean[42];
  static {
    jj_mask_10[LOWALPHA] =
    jj_mask_10[HIGHALPHA] =
    jj_mask_10[DIGIT] =
    jj_mask_10[TILDE] =
    jj_mask_10[ATSIGN] =
    jj_mask_10[SLASH] =
    jj_mask_10[L_PAREN] =
    jj_mask_10[R_PAREN] =
    jj_mask_10[DOLLAR] =
    jj_mask_10[MINUS] =
    jj_mask_10[USCORE] =
    jj_mask_10[DOT] =
    jj_mask_10[PLUS] =
    jj_mask_10[SEMI] =
    jj_mask_10[QUES] =
    jj_mask_10[COLON] =
    jj_mask_10[AMP] =
    jj_mask_10[EQUAL] =
    jj_mask_10[BANG] =
    jj_mask_10[STAR] =
    jj_mask_10[COMMA] =
    jj_mask_10[POUND] =
    jj_mask_10[PERCENT] =
    jj_mask_10[ATTRIB_INFO] =
    jj_mask_10[SIGNATURE] = true;
  }
  
  static final public String urlchar() throws ParseError {
         String retval = null;
         Token thetoken = null;
    if (jj_mask_30[getToken(1).kind]) {
      thetoken = jj_consume_token(DOT);
    } else {
      jj_expLA1[30] = jj_gen;
      if (jj_mask_29[getToken(1).kind]) {
        thetoken = jj_consume_token(DOLLAR);
      } else {
        jj_expLA1[29] = jj_gen;
        if (jj_mask_28[getToken(1).kind]) {
          thetoken = jj_consume_token(COMMA);
        } else {
          jj_expLA1[28] = jj_gen;
          if (jj_mask_27[getToken(1).kind]) {
            thetoken = jj_consume_token(SEMI);
          } else {
            jj_expLA1[27] = jj_gen;
            if (jj_mask_26[getToken(1).kind]) {
              thetoken = jj_consume_token(COLON);
            } else {
              jj_expLA1[26] = jj_gen;
              if (jj_mask_25[getToken(1).kind]) {
                thetoken = jj_consume_token(AMP);
              } else {
                jj_expLA1[25] = jj_gen;
                if (jj_mask_24[getToken(1).kind]) {
                  thetoken = jj_consume_token(EQUAL);
                } else {
                  jj_expLA1[24] = jj_gen;
                  if (jj_mask_23[getToken(1).kind]) {
                    thetoken = jj_consume_token(QUES);
                  } else {
                    jj_expLA1[23] = jj_gen;
                    if (jj_mask_22[getToken(1).kind]) {
                      thetoken = jj_consume_token(BANG);
                    } else {
                      jj_expLA1[22] = jj_gen;
                      if (jj_mask_21[getToken(1).kind]) {
                        thetoken = jj_consume_token(STAR);
                      } else {
                        jj_expLA1[21] = jj_gen;
                        if (jj_mask_20[getToken(1).kind]) {
                          thetoken = jj_consume_token(TILDE);
                        } else {
                          jj_expLA1[20] = jj_gen;
                          if (jj_mask_19[getToken(1).kind]) {
                            thetoken = jj_consume_token(ATSIGN);
                          } else {
                            jj_expLA1[19] = jj_gen;
                            if (jj_mask_18[getToken(1).kind]) {
                              thetoken = jj_consume_token(POUND);
                            } else {
                              jj_expLA1[18] = jj_gen;
                              if (jj_mask_17[getToken(1).kind]) {
                                thetoken = jj_consume_token(USCORE);
                              } else {
                                jj_expLA1[17] = jj_gen;
                                if (jj_mask_16[getToken(1).kind]) {
                                  thetoken = jj_consume_token(L_PAREN);
                                } else {
                                  jj_expLA1[16] = jj_gen;
                                  if (jj_mask_15[getToken(1).kind]) {
                                    thetoken = jj_consume_token(R_PAREN);
                                  } else {
                                    jj_expLA1[15] = jj_gen;
                                    if (jj_mask_14[getToken(1).kind]) {
                                      thetoken = jj_consume_token(SLASH);
                                    } else {
                                      jj_expLA1[14] = jj_gen;
                                      if (jj_mask_13[getToken(1).kind]) {
                                        retval = alphaNumPM();
                                      } else {
                                        jj_expLA1[13] = jj_gen;
                                        if (jj_mask_12[getToken(1).kind]) {
                                          retval = escape();
                                        } else {
                                          jj_expLA1[12] = jj_gen;
                                          if (jj_mask_11[getToken(1).kind]) {
                                            retval = reservedString();
                                          } else {
                                            jj_expLA1[11] = jj_gen;
                                            jj_consume_token(-1);
                                            throw new ParseError();
                                          }
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
             if (thetoken!=null) {
                 if (thetoken.specialToken!=null)
                     retval=" "+thetoken.image;
                 else
                     retval=thetoken.image;
             }
             return retval;
  }

  static boolean[] jj_mask_11 = new boolean[42];
  static {
    jj_mask_11[ATTRIB_INFO] =
    jj_mask_11[SIGNATURE] = true;
  }
  static boolean[] jj_mask_12 = new boolean[42];
  static {
    jj_mask_12[PERCENT] = true;
  }
  static boolean[] jj_mask_13 = new boolean[42];
  static {
    jj_mask_13[LOWALPHA] =
    jj_mask_13[HIGHALPHA] =
    jj_mask_13[DIGIT] =
    jj_mask_13[MINUS] =
    jj_mask_13[PLUS] = true;
  }
  static boolean[] jj_mask_14 = new boolean[42];
  static {
    jj_mask_14[SLASH] = true;
  }
  static boolean[] jj_mask_15 = new boolean[42];
  static {
    jj_mask_15[R_PAREN] = true;
  }
  static boolean[] jj_mask_16 = new boolean[42];
  static {
    jj_mask_16[L_PAREN] = true;
  }
  static boolean[] jj_mask_17 = new boolean[42];
  static {
    jj_mask_17[USCORE] = true;
  }
  static boolean[] jj_mask_18 = new boolean[42];
  static {
    jj_mask_18[POUND] = true;
  }
  static boolean[] jj_mask_19 = new boolean[42];
  static {
    jj_mask_19[ATSIGN] = true;
  }
  static boolean[] jj_mask_20 = new boolean[42];
  static {
    jj_mask_20[TILDE] = true;
  }
  static boolean[] jj_mask_21 = new boolean[42];
  static {
    jj_mask_21[STAR] = true;
  }
  static boolean[] jj_mask_22 = new boolean[42];
  static {
    jj_mask_22[BANG] = true;
  }
  static boolean[] jj_mask_23 = new boolean[42];
  static {
    jj_mask_23[QUES] = true;
  }
  static boolean[] jj_mask_24 = new boolean[42];
  static {
    jj_mask_24[EQUAL] = true;
  }
  static boolean[] jj_mask_25 = new boolean[42];
  static {
    jj_mask_25[AMP] = true;
  }
  static boolean[] jj_mask_26 = new boolean[42];
  static {
    jj_mask_26[COLON] = true;
  }
  static boolean[] jj_mask_27 = new boolean[42];
  static {
    jj_mask_27[SEMI] = true;
  }
  static boolean[] jj_mask_28 = new boolean[42];
  static {
    jj_mask_28[COMMA] = true;
  }
  static boolean[] jj_mask_29 = new boolean[42];
  static {
    jj_mask_29[DOLLAR] = true;
  }
  static boolean[] jj_mask_30 = new boolean[42];
  static {
    jj_mask_30[DOT] = true;
  }
  
  static final public String alphaNumPM() throws ParseError {
         String retval = null;
         Token thetoken = null;
    if (jj_mask_34[getToken(1).kind]) {
      if (jj_mask_33[getToken(1).kind]) {
        retval = alpha();
      } else {
        jj_expLA1[33] = jj_gen;
        if (jj_mask_32[getToken(1).kind]) {
          retval = sign();
        } else {
          jj_expLA1[32] = jj_gen;
          jj_consume_token(-1);
          throw new ParseError();
        }
      }
             return retval;
    } else {
      jj_expLA1[34] = jj_gen;
      if (jj_mask_31[getToken(1).kind]) {
        thetoken = jj_consume_token(DIGIT);
             return thetoken.image;
      } else {
        jj_expLA1[31] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
  }

  static boolean[] jj_mask_31 = new boolean[42];
  static {
    jj_mask_31[DIGIT] = true;
  }
  static boolean[] jj_mask_32 = new boolean[42];
  static {
    jj_mask_32[MINUS] =
    jj_mask_32[PLUS] = true;
  }
  static boolean[] jj_mask_33 = new boolean[42];
  static {
    jj_mask_33[LOWALPHA] =
    jj_mask_33[HIGHALPHA] = true;
  }
  static boolean[] jj_mask_34 = new boolean[42];
  static {
    jj_mask_34[LOWALPHA] =
    jj_mask_34[HIGHALPHA] =
    jj_mask_34[MINUS] =
    jj_mask_34[PLUS] = true;
  }
  
  static final public String alpha() throws ParseError {
         Token thetoken = null;
    if (jj_mask_36[getToken(1).kind]) {
      thetoken = jj_consume_token(LOWALPHA);
    } else {
      jj_expLA1[36] = jj_gen;
      if (jj_mask_35[getToken(1).kind]) {
        thetoken = jj_consume_token(HIGHALPHA);
      } else {
        jj_expLA1[35] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
             return thetoken.image;
  }

  static boolean[] jj_mask_35 = new boolean[42];
  static {
    jj_mask_35[HIGHALPHA] = true;
  }
  static boolean[] jj_mask_36 = new boolean[42];
  static {
    jj_mask_36[LOWALPHA] = true;
  }
  
  static final public String sign() throws ParseError {
         Token thetoken = null;
    if (jj_mask_38[getToken(1).kind]) {
      thetoken = jj_consume_token(PLUS);
    } else {
      jj_expLA1[38] = jj_gen;
      if (jj_mask_37[getToken(1).kind]) {
        thetoken = jj_consume_token(MINUS);
      } else {
        jj_expLA1[37] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
             return thetoken.image;
  }

  static boolean[] jj_mask_37 = new boolean[42];
  static {
    jj_mask_37[MINUS] = true;
  }
  static boolean[] jj_mask_38 = new boolean[42];
  static {
    jj_mask_38[PLUS] = true;
  }
  
  static final public String escape() throws ParseError {
         String temp = null;
         String retval = new String("%");
    jj_consume_token(PERCENT);
    temp = hex();
             retval+=temp;
    temp = hex();
             retval+=temp;
             return retval;
  }

  static final public String hex() throws ParseError {
         Token hextoken = null;
    if (jj_mask_41[getToken(1).kind]) {
      hextoken = jj_consume_token(DIGIT);
    } else {
      jj_expLA1[41] = jj_gen;
      if (jj_mask_40[getToken(1).kind]) {
        hextoken = jj_consume_token(LOWALPHA);
             char testchar = hextoken.image.charAt(0);
             if ((testchar>'f') || (testchar<'a'))
                 throw new ParseError("malformed hex");
      } else {
        jj_expLA1[40] = jj_gen;
        if (jj_mask_39[getToken(1).kind]) {
          hextoken = jj_consume_token(HIGHALPHA);
             char testchar = hextoken.image.charAt(0);
             if ((testchar>'F') || (testchar<'A'))
                 throw new ParseError("malformed hex");
        } else {
          jj_expLA1[39] = jj_gen;
          jj_consume_token(-1);
          throw new ParseError();
        }
      }
    }
             return hextoken.image;
  }

  static boolean[] jj_mask_39 = new boolean[42];
  static {
    jj_mask_39[HIGHALPHA] = true;
  }
  static boolean[] jj_mask_40 = new boolean[42];
  static {
    jj_mask_40[LOWALPHA] = true;
  }
  static boolean[] jj_mask_41 = new boolean[42];
  static {
    jj_mask_41[DIGIT] = true;
  }
  
  static final public String reservedString() throws ParseError {
         Token thetoken = null;
    if (jj_mask_43[getToken(1).kind]) {
      thetoken = jj_consume_token(ATTRIB_INFO);
    } else {
      jj_expLA1[43] = jj_gen;
      if (jj_mask_42[getToken(1).kind]) {
        thetoken = jj_consume_token(SIGNATURE);
      } else {
        jj_expLA1[42] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
             return thetoken.image;
  }

  static boolean[] jj_mask_42 = new boolean[42];
  static {
    jj_mask_42[SIGNATURE] = true;
  }
  static boolean[] jj_mask_43 = new boolean[42];
  static {
    jj_mask_43[ATTRIB_INFO] = true;
  }
  
  static final public String number() throws ParseError {
         String retval = "";
         String temp = null;
    if (jj_mask_44[getToken(1).kind]) {
      temp = sign();
             retval+=temp;
    } else {
      jj_expLA1[44] = jj_gen;
      ;
    }
    temp = unsignedint();
             retval+=temp;
    if (jj_mask_46[getToken(1).kind]) {
      jj_consume_token(DOT);
             retval+=".";
      if (jj_mask_45[getToken(1).kind]) {
        temp = unsignedint();
             retval+=temp;
      } else {
        jj_expLA1[45] = jj_gen;
        ;
      }
    } else {
      jj_expLA1[46] = jj_gen;
      ;
    }
             return retval;
  }

  static boolean[] jj_mask_44 = new boolean[42];
  static {
    jj_mask_44[MINUS] =
    jj_mask_44[PLUS] = true;
  }
  static boolean[] jj_mask_45 = new boolean[42];
  static {
    jj_mask_45[DIGIT] = true;
  }
  static boolean[] jj_mask_46 = new boolean[42];
  static {
    jj_mask_46[DOT] = true;
  }
  
  static final public String unsignedint() throws ParseError {
         String retval = "";
         Token thetoken = null;
    label_6:
    while (true) {
      thetoken = jj_consume_token(DIGIT);
             retval+=thetoken.image;
      if (jj_mask_47[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[47] = jj_gen;
        break label_6;
      }
    }
             return retval;
  }

  static boolean[] jj_mask_47 = new boolean[42];
  static {
    jj_mask_47[DIGIT] = true;
  }
  
  static final public String quotedBase64String() throws ParseError {
         String retval = "";
         String temp = null;
    jj_consume_token(DQUOTE);
    label_7:
    while (true) {
      if (jj_mask_48[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[48] = jj_gen;
        break label_7;
      }
      temp = base64char();
             retval+=temp;
    }
    jj_consume_token(DQUOTE);
             return retval;
  }

  static boolean[] jj_mask_48 = new boolean[42];
  static {
    jj_mask_48[LOWALPHA] =
    jj_mask_48[HIGHALPHA] =
    jj_mask_48[DIGIT] =
    jj_mask_48[SLASH] =
    jj_mask_48[PLUS] =
    jj_mask_48[EQUAL] = true;
  }
  
  static final public String base64char() throws ParseError {
         Token thetoken = null;
    if (jj_mask_54[getToken(1).kind]) {
      thetoken = jj_consume_token(HIGHALPHA);
    } else {
      jj_expLA1[54] = jj_gen;
      if (jj_mask_53[getToken(1).kind]) {
        thetoken = jj_consume_token(LOWALPHA);
      } else {
        jj_expLA1[53] = jj_gen;
        if (jj_mask_52[getToken(1).kind]) {
          thetoken = jj_consume_token(DIGIT);
        } else {
          jj_expLA1[52] = jj_gen;
          if (jj_mask_51[getToken(1).kind]) {
            thetoken = jj_consume_token(PLUS);
          } else {
            jj_expLA1[51] = jj_gen;
            if (jj_mask_50[getToken(1).kind]) {
              thetoken = jj_consume_token(SLASH);
            } else {
              jj_expLA1[50] = jj_gen;
              if (jj_mask_49[getToken(1).kind]) {
                thetoken = jj_consume_token(EQUAL);
              } else {
                jj_expLA1[49] = jj_gen;
                jj_consume_token(-1);
                throw new ParseError();
              }
            }
          }
        }
      }
    }
             return thetoken.image;
  }

  static boolean[] jj_mask_49 = new boolean[42];
  static {
    jj_mask_49[EQUAL] = true;
  }
  static boolean[] jj_mask_50 = new boolean[42];
  static {
    jj_mask_50[SLASH] = true;
  }
  static boolean[] jj_mask_51 = new boolean[42];
  static {
    jj_mask_51[PLUS] = true;
  }
  static boolean[] jj_mask_52 = new boolean[42];
  static {
    jj_mask_52[DIGIT] = true;
  }
  static boolean[] jj_mask_53 = new boolean[42];
  static {
    jj_mask_53[LOWALPHA] = true;
  }
  static boolean[] jj_mask_54 = new boolean[42];
  static {
    jj_mask_54[HIGHALPHA] = true;
  }
  
  static final public String quotedISOdate() throws ParseError {
         Token tee = null;
         String retval = new String("");
         String temp = null;
    jj_consume_token(DQUOTE);
    temp = ISOyear();
             retval+=temp;
    jj_consume_token(DOT);
    temp = ISOmonth();
             retval+="."+temp;
    jj_consume_token(DOT);
    temp = ISOday();
             retval+="."+temp;
    if (jj_mask_56[getToken(1).kind]) {
      tee = jj_consume_token(HIGHALPHA);
    } else {
      jj_expLA1[56] = jj_gen;
      if (jj_mask_55[getToken(1).kind]) {
        tee = jj_consume_token(LOWALPHA);
      } else {
        jj_expLA1[55] = jj_gen;
        jj_consume_token(-1);
        throw new ParseError();
      }
    }
             if (!tee.image.equals("T"))
                 throw new ParseError("malformed ISO date");
    temp = ISOhour();
             retval+="T"+temp;
    jj_consume_token(COLON);
    temp = ISOminute();
             retval+=":"+temp;
    temp = sign();
             retval+=temp;
    temp = ISOtimezone();
             retval+=temp;
    jj_consume_token(DQUOTE);
             return retval;
  }

  static boolean[] jj_mask_55 = new boolean[42];
  static {
    jj_mask_55[LOWALPHA] = true;
  }
  static boolean[] jj_mask_56 = new boolean[42];
  static {
    jj_mask_56[HIGHALPHA] = true;
  }
  
/* ISODate parsing productions */
  static final public String ISOyear() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         Token token3 = null;
         Token token4 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
    token3 = jj_consume_token(DIGIT);
    token4 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             retval+=token3.image;
             retval+=token4.image;
             return retval;
  }

  static final public String ISOmonth() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             int month = Integer.valueOf(retval).intValue();
             if ((month>12) || (month<1)) {
                 throw new ParseError("malformed month in ISO date");
             }
             return retval;
  }

  static final public String ISOday() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             int day = Integer.valueOf(retval).intValue();
             if ((day>31) || (day<1)) {
                 throw new ParseError("malformed date in ISO date");
             }
             return retval;
  }

  static final public String ISOhour() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             int hour = Integer.valueOf(retval).intValue();
             if ((hour>23) || (hour<0)) {
                 throw new ParseError("malformed hour in ISO date");
             }
             return retval;
  }

  static final public String ISOminute() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             int minute = Integer.valueOf(retval).intValue();
             if ((minute>60) || (minute<0)) {
                 throw new ParseError("malformed minute in ISO date");
             }
             return retval;
  }

  static final public String ISOtimezone() throws ParseError {
         Token token1 = null;
         Token token2 = null;
         Token token3 = null;
         Token token4 = null;
         String retval = new String("");
    token1 = jj_consume_token(DIGIT);
    token2 = jj_consume_token(DIGIT);
    token3 = jj_consume_token(DIGIT);
    token4 = jj_consume_token(DIGIT);
             retval+=token1.image;
             retval+=token2.image;
             retval+=token3.image;
             retval+=token4.image;
             return retval;
  }

  static final public String quotedName() throws ParseError {
         String temp = null;
         String retval = new String("");
    jj_consume_token(DQUOTE);
    label_8:
    while (true) {
      temp = urlchar();
             retval+=temp;
      if (jj_mask_57[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[57] = jj_gen;
        break label_8;
      }
    }
    jj_consume_token(DQUOTE);
             return retval;
  }

  static boolean[] jj_mask_57 = new boolean[42];
  static {
    jj_mask_57[LOWALPHA] =
    jj_mask_57[HIGHALPHA] =
    jj_mask_57[DIGIT] =
    jj_mask_57[TILDE] =
    jj_mask_57[ATSIGN] =
    jj_mask_57[SLASH] =
    jj_mask_57[L_PAREN] =
    jj_mask_57[R_PAREN] =
    jj_mask_57[DOLLAR] =
    jj_mask_57[MINUS] =
    jj_mask_57[USCORE] =
    jj_mask_57[DOT] =
    jj_mask_57[PLUS] =
    jj_mask_57[SEMI] =
    jj_mask_57[QUES] =
    jj_mask_57[COLON] =
    jj_mask_57[AMP] =
    jj_mask_57[EQUAL] =
    jj_mask_57[BANG] =
    jj_mask_57[STAR] =
    jj_mask_57[COMMA] =
    jj_mask_57[POUND] =
    jj_mask_57[PERCENT] =
    jj_mask_57[ATTRIB_INFO] =
    jj_mask_57[SIGNATURE] = true;
  }
  
/* This is the entry procedure for ResInfos */
  static final public void resInfo(Vector top) throws ParseError {
         Vector retval = null;
    label_9:
    while (true) {
      retval = resinfoData();
             top.addElement(retval);
      if (jj_mask_58[getToken(1).kind]) {
        ;
      } else {
        jj_expLA1[58] = jj_gen;
        break label_9;
      }
    }
  }

  static boolean[] jj_mask_58 = new boolean[42];
  static {
    jj_mask_58[L_PAREN] = true;
  }
  
  static final public Vector resinfoData() throws ParseError {
         Vector retval = new Vector();
         String rstring = null;
    jj_consume_token(L_PAREN);
    rstring = HashAlogID();
             retval.addElement(rstring);
    rstring = resourceHash();
             retval.addElement(rstring);
    if (jj_mask_59[getToken(1).kind]) {
      hashDate();
    } else {
      jj_expLA1[59] = jj_gen;
      ;
    }
    jj_consume_token(R_PAREN);
             return retval;
  }

  static boolean[] jj_mask_59 = new boolean[42];
  static {
    jj_mask_59[DQUOTE] = true;
  }
  
  static final public String HashAlogID() throws ParseError {
         String retval = null;
    retval = quotedURL();
             return retval;
  }

  static final public String resourceHash() throws ParseError {
         String retval = null;
    retval = quotedBase64String();
             return retval;
  }

  static final public String hashDate() throws ParseError {
         String retval = null;
    retval = quotedISOdate();
             return retval;
  }

  static final private boolean jj_2_1(int xla) throws ParseError {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_1();
    jj_save(0, xla);
    return retval;
  }

  static final private boolean jj_2_2(int xla) throws ParseError {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_2();
    jj_save(1, xla);
    return retval;
  }

  static final private boolean jj_2_3(int xla) throws ParseError {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_3();
    jj_save(2, xla);
    return retval;
  }

  static final private boolean jj_2_4(int xla) throws ParseError {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_4();
    jj_save(3, xla);
    return retval;
  }

  static final private boolean jj_2_5(int xla) throws ParseError {
    jj_la = xla; jj_lastpos = jj_scanpos = token;
    boolean retval = !jj_3_5();
    jj_save(4, xla);
    return retval;
  }

  static final private boolean jj_3_1() throws ParseError {
    if (jj_3R_10()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_2() throws ParseError {
    if (jj_3R_11()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_3() throws ParseError {
    if (jj_3R_10()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_4() throws ParseError {
    if (jj_3R_12()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3_5() throws ParseError {
    if (jj_3R_13()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_10() throws ParseError {
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_14()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_11() throws ParseError {
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_15()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_12() throws ParseError {
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_16()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_17()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_18()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_19()) {
    jj_scanpos = xsp;
    if (jj_3R_20()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_21()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_22()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_23()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_24()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_13() throws ParseError {
    if (jj_scan_token(L_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_25()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(R_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_14() throws ParseError {
    if (jj_3R_27()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_15() throws ParseError {
    Token xsp;
    if (jj_3R_28()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_28()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_16() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_17() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_18() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_19() throws ParseError {
    if (jj_scan_token(HIGHALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_20() throws ParseError {
    if (jj_scan_token(LOWALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_21() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_22() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_23() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_29()) {
    jj_scanpos = xsp;
    if (jj_3R_30()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_24() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_25() throws ParseError {
    if (jj_3R_31()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_26() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_32()) {
    jj_scanpos = xsp;
    if (jj_3R_33()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_27() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_34()) {
    jj_scanpos = xsp;
    if (jj_3R_35()) {
    jj_scanpos = xsp;
    if (jj_3R_36()) {
    jj_scanpos = xsp;
    if (jj_3R_37()) {
    jj_scanpos = xsp;
    if (jj_3R_38()) {
    jj_scanpos = xsp;
    if (jj_3R_39()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_28() throws ParseError {
    if (jj_3R_40()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_29() throws ParseError {
    if (jj_scan_token(PLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_30() throws ParseError {
    if (jj_scan_token(MINUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_31() throws ParseError {
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    if (jj_3R_41()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_41()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(DQUOTE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_32() throws ParseError {
    if (jj_3R_42()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_33() throws ParseError {
    if (jj_3R_43()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_34() throws ParseError {
    if (jj_scan_token(HIGHALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_35() throws ParseError {
    if (jj_scan_token(LOWALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_36() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_37() throws ParseError {
    if (jj_scan_token(PLUS)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_38() throws ParseError {
    if (jj_scan_token(SLASH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_39() throws ParseError {
    if (jj_scan_token(EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_40() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_44()) {
    jj_scanpos = xsp;
    if (jj_3R_45()) {
    jj_scanpos = xsp;
    if (jj_3R_46()) {
    jj_scanpos = xsp;
    if (jj_3R_47()) {
    jj_scanpos = xsp;
    if (jj_3R_48()) {
    jj_scanpos = xsp;
    if (jj_3R_49()) {
    jj_scanpos = xsp;
    if (jj_3R_50()) {
    jj_scanpos = xsp;
    if (jj_3R_51()) {
    jj_scanpos = xsp;
    if (jj_3R_52()) {
    jj_scanpos = xsp;
    if (jj_3R_53()) {
    jj_scanpos = xsp;
    if (jj_3R_54()) {
    jj_scanpos = xsp;
    if (jj_3R_55()) {
    jj_scanpos = xsp;
    if (jj_3R_56()) {
    jj_scanpos = xsp;
    if (jj_3R_57()) {
    jj_scanpos = xsp;
    if (jj_3R_58()) {
    jj_scanpos = xsp;
    if (jj_3R_59()) {
    jj_scanpos = xsp;
    if (jj_3R_60()) {
    jj_scanpos = xsp;
    if (jj_3R_61()) {
    jj_scanpos = xsp;
    if (jj_3R_62()) {
    jj_scanpos = xsp;
    if (jj_3R_63()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_41() throws ParseError {
    if (jj_3R_40()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_42() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_64()) {
    jj_scanpos = xsp;
    if (jj_3R_65()) {
    jj_scanpos = xsp;
    if (jj_3R_66()) {
    jj_scanpos = xsp;
    if (jj_3R_67()) {
    jj_scanpos = xsp;
    if (jj_3R_68()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_43() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_69()) {
    jj_scanpos = xsp;
    if (jj_3R_70()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_44() throws ParseError {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_45() throws ParseError {
    if (jj_scan_token(DOLLAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_46() throws ParseError {
    if (jj_scan_token(COMMA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_47() throws ParseError {
    if (jj_scan_token(SEMI)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_48() throws ParseError {
    if (jj_scan_token(COLON)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_49() throws ParseError {
    if (jj_scan_token(AMP)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_50() throws ParseError {
    if (jj_scan_token(EQUAL)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_51() throws ParseError {
    if (jj_scan_token(QUES)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_52() throws ParseError {
    if (jj_scan_token(BANG)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_53() throws ParseError {
    if (jj_scan_token(STAR)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_54() throws ParseError {
    if (jj_scan_token(TILDE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_55() throws ParseError {
    if (jj_scan_token(ATSIGN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_56() throws ParseError {
    if (jj_scan_token(POUND)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_57() throws ParseError {
    if (jj_scan_token(USCORE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_58() throws ParseError {
    if (jj_scan_token(L_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_59() throws ParseError {
    if (jj_scan_token(R_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_60() throws ParseError {
    if (jj_scan_token(SLASH)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_61() throws ParseError {
    if (jj_3R_71()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_62() throws ParseError {
    if (jj_3R_72()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_63() throws ParseError {
    if (jj_3R_73()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_64() throws ParseError {
    if (jj_3R_12()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_65() throws ParseError {
    if (jj_3R_10()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_66() throws ParseError {
    if (jj_3R_11()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_67() throws ParseError {
    if (jj_3R_31()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_68() throws ParseError {
    if (jj_3R_74()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_69() throws ParseError {
    if (jj_3R_13()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_70() throws ParseError {
    if (jj_scan_token(L_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    if (jj_3R_75()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_75()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    if (jj_scan_token(R_PAREN)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_71() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_76()) {
    jj_scanpos = xsp;
    if (jj_3R_77()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_72() throws ParseError {
    if (jj_scan_token(PERCENT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_78()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_78()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_73() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_79()) {
    jj_scanpos = xsp;
    if (jj_3R_80()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_74() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_81()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    if (jj_3R_82()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    xsp = jj_scanpos;
    if (jj_3R_83()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_75() throws ParseError {
    if (jj_3R_26()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_76() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_84()) {
    jj_scanpos = xsp;
    if (jj_3R_85()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_77() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_78() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_86()) {
    jj_scanpos = xsp;
    if (jj_3R_87()) {
    jj_scanpos = xsp;
    if (jj_3R_88()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_79() throws ParseError {
    if (jj_scan_token(ATTRIB_INFO)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_80() throws ParseError {
    if (jj_scan_token(SIGNATURE)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_81() throws ParseError {
    if (jj_3R_23()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_82() throws ParseError {
    Token xsp;
    if (jj_3R_89()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    while (true) {
      xsp = jj_scanpos;
      if (jj_3R_89()) { jj_scanpos = xsp; break; }
      if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    }
    return false;
  }

  static final private boolean jj_3R_83() throws ParseError {
    if (jj_scan_token(DOT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_90()) jj_scanpos = xsp;
    else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_84() throws ParseError {
    if (jj_3R_91()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_85() throws ParseError {
    if (jj_3R_23()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_86() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_87() throws ParseError {
    if (jj_scan_token(LOWALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_88() throws ParseError {
    if (jj_scan_token(HIGHALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_89() throws ParseError {
    if (jj_scan_token(DIGIT)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_90() throws ParseError {
    if (jj_3R_82()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_91() throws ParseError {
    Token xsp;
    xsp = jj_scanpos;
    if (jj_3R_92()) {
    jj_scanpos = xsp;
    if (jj_3R_93()) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    } else if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_92() throws ParseError {
    if (jj_scan_token(LOWALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static final private boolean jj_3R_93() throws ParseError {
    if (jj_scan_token(HIGHALPHA)) return true;
    if (jj_la == 0 && jj_scanpos == jj_lastpos) return false;
    return false;
  }

  static private boolean jj_initialized_once = false;
  static public DSigParserTokenManager token_source;
  static public Token token;
  static private Token jj_scanpos, jj_lastpos;
  static private int jj_la;
  static public boolean lookingAhead = false;
  static private boolean jj_semLA;
  static private DSigParser jj_me;
  static private int jj_gen;
  static private int[] jj_expLA1 = new int[60];
  static private JJDSigParserCalls[] jj_2_rtns = new JJDSigParserCalls[5];
  static private boolean jj_rescan = false;

  public DSigParser(java.io.InputStream stream) {
    if (jj_initialized_once) {
      System.out.println("ERROR: Second call to constructor of static parser.  You must");
      System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
      System.out.println("       during parser generation.");
      throw new Error();
    }
    jj_initialized_once = true;
    ASCII_CharStream input_stream = new ASCII_CharStream(stream, 1, 1);
    token_source = new DSigParserTokenManager(input_stream);
    token = new Token();
    jj_me = this;
    jj_gen = 0;
    for (int i = 0; i < 60; i++) jj_expLA1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJDSigParserCalls();
  }

  static public void ReInit(java.io.InputStream stream) {
    ASCII_CharStream input_stream = new ASCII_CharStream(stream, 1, 1);
    token_source.ReInit(input_stream);
    token = new Token();
    jj_gen = 0;
    for (int i = 0; i < 60; i++) jj_expLA1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJDSigParserCalls();
  }

  public DSigParser(DSigParserTokenManager tm) {
    if (jj_initialized_once) {
      System.out.println("ERROR: Second call to constructor of static parser.  You must");
      System.out.println("       either use ReInit() or set the JavaCC option STATIC to false");
      System.out.println("       during parser generation.");
      throw new Error();
    }
    jj_initialized_once = true;
    token_source = tm;
    token = new Token();
    jj_me = this;
    jj_gen = 0;
    for (int i = 0; i < 60; i++) jj_expLA1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJDSigParserCalls();
  }

  public void ReInit(DSigParserTokenManager tm) {
    token_source = tm;
    token = new Token();
    jj_gen = 0;
    for (int i = 0; i < 60; i++) jj_expLA1[i] = -1;
    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJDSigParserCalls();
  }

  static final private Token jj_consume_token(int kind) throws ParseError {
    if (token.next != null) token = token.next;
    else token = token.next = token_source.getNextToken();
    if (token.kind == kind) {
      jj_gen++;
      return token;
    }
    jj_token_error_setup(token, kind);
    throw new ParseError();
  }

  static final private boolean jj_scan_token(int kind) throws ParseError {
    if (jj_scanpos == jj_lastpos) {
      jj_la--;
      if (jj_scanpos.next == null) {
        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
      } else {
        jj_lastpos = jj_scanpos = jj_scanpos.next;
      }
    } else {
      jj_scanpos = jj_scanpos.next;
    }
    if (jj_rescan) {
      int i = 1; Token tok = token;
      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
      if (tok != null) jj_add_error_token(kind, i);
    }
    return (jj_scanpos.kind != kind);
  }

  static final public Token getNextToken() throws ParseError {
    if (token.next != null) token = token.next;
    else token = token.next = token_source.getNextToken();
    jj_gen++;
    return token;
  }

  static final public Token getToken(int index) throws ParseError {
    Token t = lookingAhead ? jj_scanpos : token;
    for (int i = 0; i < index; i++) {
      if (t.next != null) t = t.next;
      else t = t.next = token_source.getNextToken();
    }
    return t;
  }

  static final String jj_add_escapes(String str) {
    String retval = "";
    char ch;
    for (int i = 0; i < str.length(); i++) {
      ch = str.charAt(i);
      if (ch == '\b') {
        retval += "\\b";
      } else if (ch == '\t') {
        retval += "\\t";
      } else if (ch == '\n') {
        retval += "\\n";
      } else if (ch == '\f') {
        retval += "\\f";
      } else if (ch == '\r') {
        retval += "\\r";
      } else if (ch == '\"') {
        retval += "\\\"";
      } else if (ch == '\'') {
        retval += "\\\'";
      } else if (ch == '\\') {
        retval += "\\\\";
      } else if (ch < 0x20 || ch > 0x7e) {
        String s = "0000" + Integer.toString(ch, 16);
        retval += "\\u" + s.substring(s.length() - 4, s.length());
      } else {
        retval += ch;
      }
    }
    return retval;
  }

  static protected int error_line;
  static protected int error_column;
  static protected String error_string;
  static protected String[] expected_tokens;

  protected void token_error() {
    System.out.println("");
    System.out.println("Parse error at line " + error_line + ", column " + error_column + ".  Encountered:");
    System.out.println("    \"" + jj_add_escapes(error_string) + "\"");
    System.out.println("");
    if (expected_tokens.length == 1) {
      System.out.println("Was expecting:");
    } else {
      System.out.println("Was expecting one of:");
    }
    for (int i = 0; i < expected_tokens.length; i++) {
      System.out.println("    " + expected_tokens[i]);
    }
    System.out.println("");
  }

  static private java.util.Vector jj_errortokens = new java.util.Vector();
  static private int[] jj_lasttokens = new int[100];
  static private int jj_endpos, jj_maxsize;

  static private void jj_add_error_token(int kind, int pos) {
    if (pos >= 100) return;
    if (pos == jj_endpos + 1) {
      jj_lasttokens[jj_endpos++] = kind;
    } else if (jj_endpos != 0) {
      if (jj_endpos > jj_maxsize) jj_maxsize = jj_endpos;
      String buf = "";
      for (int i = 0; i < jj_endpos; i++) {
        buf += tokenImage[jj_lasttokens[i]] + " ";
      }
      if (jj_lasttokens[jj_endpos-1] != 0) buf += "...";
      boolean exists = false;
      for (java.util.Enumeration enum = jj_errortokens.elements(); enum.hasMoreElements();) {
        if (buf.equals((String)(enum.nextElement()))) {
          exists = true;
        }
      }
      if (!exists) jj_errortokens.addElement(buf);
      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
    }
  }

  static final private void jj_token_error_setup(Token current, int kind) throws ParseError {
    jj_errortokens.removeAllElements();
    boolean[] la1tokens = new boolean[42];
    boolean[] mask = null;
    for (int i = 0; i < 42; i++) {
      la1tokens[i] = false;
    }
    if (kind >= 0) la1tokens[kind] = true;
    for (int i = 0; i < 60; i++) {
      if (jj_expLA1[i] == jj_gen) {
        switch (i) {
          case 0: mask = jj_mask_0; break;
          case 1: mask = jj_mask_1; break;
          case 2: mask = jj_mask_2; break;
          case 3: mask = jj_mask_3; break;
          case 4: mask = jj_mask_4; break;
          case 5: mask = jj_mask_5; break;
          case 6: mask = jj_mask_6; break;
          case 7: mask = jj_mask_7; break;
          case 8: mask = jj_mask_8; break;
          case 9: mask = jj_mask_9; break;
          case 10: mask = jj_mask_10; break;
          case 11: mask = jj_mask_11; break;
          case 12: mask = jj_mask_12; break;
          case 13: mask = jj_mask_13; break;
          case 14: mask = jj_mask_14; break;
          case 15: mask = jj_mask_15; break;
          case 16: mask = jj_mask_16; break;
          case 17: mask = jj_mask_17; break;
          case 18: mask = jj_mask_18; break;
          case 19: mask = jj_mask_19; break;
          case 20: mask = jj_mask_20; break;
          case 21: mask = jj_mask_21; break;
          case 22: mask = jj_mask_22; break;
          case 23: mask = jj_mask_23; break;
          case 24: mask = jj_mask_24; break;
          case 25: mask = jj_mask_25; break;
          case 26: mask = jj_mask_26; break;
          case 27: mask = jj_mask_27; break;
          case 28: mask = jj_mask_28; break;
          case 29: mask = jj_mask_29; break;
          case 30: mask = jj_mask_30; break;
          case 31: mask = jj_mask_31; break;
          case 32: mask = jj_mask_32; break;
          case 33: mask = jj_mask_33; break;
          case 34: mask = jj_mask_34; break;
          case 35: mask = jj_mask_35; break;
          case 36: mask = jj_mask_36; break;
          case 37: mask = jj_mask_37; break;
          case 38: mask = jj_mask_38; break;
          case 39: mask = jj_mask_39; break;
          case 40: mask = jj_mask_40; break;
          case 41: mask = jj_mask_41; break;
          case 42: mask = jj_mask_42; break;
          case 43: mask = jj_mask_43; break;
          case 44: mask = jj_mask_44; break;
          case 45: mask = jj_mask_45; break;
          case 46: mask = jj_mask_46; break;
          case 47: mask = jj_mask_47; break;
          case 48: mask = jj_mask_48; break;
          case 49: mask = jj_mask_49; break;
          case 50: mask = jj_mask_50; break;
          case 51: mask = jj_mask_51; break;
          case 52: mask = jj_mask_52; break;
          case 53: mask = jj_mask_53; break;
          case 54: mask = jj_mask_54; break;
          case 55: mask = jj_mask_55; break;
          case 56: mask = jj_mask_56; break;
          case 57: mask = jj_mask_57; break;
          case 58: mask = jj_mask_58; break;
          case 59: mask = jj_mask_59; break;
        }
        for (int j = 0; j < 42; j++) {
          if (mask[j]) la1tokens[j] = true;
        }
      }
    }
    if (la1tokens[0]) {
      jj_errortokens.addElement(tokenImage[0] + " ");
    }
    for (int i = 1; i < 42; i++) {
      if (la1tokens[i]) {
        jj_errortokens.addElement(tokenImage[i] + " ...");
      }
    }
    jj_endpos = 0;
    jj_maxsize = 1;
    jj_rescan_token();
    jj_add_error_token(0, 0);
    expected_tokens = new String[jj_errortokens.size()];
    for (int i = 0; i < jj_errortokens.size(); i++) {
      expected_tokens[i] = (String)(jj_errortokens.elementAt(i));
    }
    error_line = current.beginLine;
    error_column = current.beginColumn;
    error_string = "";
    Token tok = current;
    for (int i = 0; i < jj_maxsize; i++) {
      if (tok.kind == 0) {
        error_string += " " + tokenImage[0];
        break;
      }
      error_string += " " + tok.image;
      tok = tok.next;
    }
    error_string = error_string.substring(1);
    jj_me.token_error();
  }

  static final public void enable_tracing() {
  }

  static final public void disable_tracing() {
  }

  static private void jj_rescan_token() throws ParseError {
    jj_rescan = true;
    for (int i = 0; i < 5; i++) {
      JJDSigParserCalls p = jj_2_rtns[i];
      do {
        if (p.gen > jj_gen) {
          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
          switch (i) {
            case 0: jj_3_1(); break;
            case 1: jj_3_2(); break;
            case 2: jj_3_3(); break;
            case 3: jj_3_4(); break;
            case 4: jj_3_5(); break;
          }
        }
        p = p.next;
      } while (p != null);
    }
    jj_rescan = false;
  }

  static private void jj_save(int index, int xla) {
    JJDSigParserCalls p = jj_2_rtns[index];
    while (p.gen > jj_gen) {
      if (p.next == null) { p = p.next = new JJDSigParserCalls(); break; }
      p = p.next;
    }
    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
  }

}

class JJDSigParserCalls {
  int gen;
  Token first;
  int arg;
  JJDSigParserCalls next;
}
