/* The following code was generated by JFlex 1.4 on 9/18/06 2:12 PM */

/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
/*nlsXXX*/
package org.eclipse.wst.jsdt.web.core.internal.contenttype;

import java.io.IOException;
import java.io.Reader;

import org.eclipse.wst.xml.core.internal.contenttype.EncodingParserConstants;
import org.eclipse.wst.xml.core.internal.contenttype.XMLHeadTokenizerConstants;

/**
 * This class is a scanner generated by <a href="http://www.jflex.de/">JFlex</a>
 * 1.4 on 9/18/06 2:12 PM from the specification file
 * <tt>D:/builds/Workspaces/WTP15maintenance/org.eclipse.wst.jsdt.web.core/DevTimeSupport/HeadParsers/JSPHeadTokenizer.jFlex</tt>
 */
public class JSPHeadTokenizer {

	/** This character denotes the end of file */
	public static final int YYEOF = -1;

	/** initial size of the lookahead buffer */
	private static final int ZZ_BUFFERSIZE = 8192;

	/** lexical states */
	public static final int YYINITIAL = 0;
	public static final int UnDelimitedString = 12;
	public static final int DQ_STRING = 8;
	public static final int SQ_STRING = 10;
	public static final int ST_XMLDecl = 2;
	public static final int ST_PAGE_DIRECTIVE = 4;
	public static final int QuotedAttributeValue = 6;

	/**
	 * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
	 * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l at the
	 * beginning of a line l is of the form l = 2*k, k a non negative integer
	 */
	private static final int ZZ_LEXSTATE[] = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6,
			6, 7, 7 };

	/**
	 * Translates characters to character classes
	 */
	private static final String ZZ_CMAP_PACKED = "\11\0\1\6\1\11\2\0\1\10\22\0\1\34\1\17\1\37\2\0"
			+ "\1\51\1\0\1\40\6\0\1\43\1\33\1\0\1\47\1\0\1\44"
			+ "\5\0\1\50\1\41\1\0\1\12\1\7\1\56\1\13\1\52\1\53"
			+ "\1\31\1\22\1\20\1\26\1\0\1\46\1\27\1\32\1\54\1\0"
			+ "\1\16\1\15\1\35\1\21\1\25\1\0\1\45\1\36\1\23\1\30"
			+ "\1\55\1\42\1\14\1\24\7\0\1\53\1\31\1\22\1\20\1\26"
			+ "\1\0\1\46\1\27\1\32\1\54\1\0\1\16\1\15\1\35\1\21"
			+ "\1\25\1\0\1\45\1\36\1\23\1\30\1\55\1\42\1\14\1\24"
			+ "\101\0\1\4\3\0\1\5\17\0\1\3\16\0\1\1\20\0\1\3"
			+ "\16\0\1\1\1\2\170\0\1\2\ufe87\0";

	/**
	 * Translates characters to character classes
	 */
	private static final char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);

	/**
	 * Translates DFA states to action switch labels.
	 */
	private static final int[] ZZ_ACTION = zzUnpackAction();

	private static final String ZZ_ACTION_PACKED_0 = "\10\0\20\1\2\2\1\1\1\3\1\4\1\5\1\6"
			+ "\1\5\1\7\2\5\1\7\1\10\2\11\4\0\1\12"
			+ "\1\13\6\0\1\14\5\0\1\15\1\16\1\0\1\17"
			+ "\1\0\1\20\4\0\1\21\36\0\1\22\20\0\1\23"
			+ "\2\0\1\24\6\0\1\25\1\26\22\0\1\27\5\0"
			+ "\1\30\52\0\1\31\5\0\1\32\12\0\1\32";

	private static int[] zzUnpackAction() {
		int[] result = new int[212];
		int offset = 0;
		offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
		return result;
	}

	private static int zzUnpackAction(String packed, int offset, int[] result) {
		int i = 0; /* index in packed string */
		int j = offset; /* index in unpacked array */
		int l = packed.length();
		while (i < l) {
			int count = packed.charAt(i++);
			int value = packed.charAt(i++);
			do {
				result[j++] = value;
			} while (--count > 0);
		}
		return j;
	}

	/* error codes */
	private static final int ZZ_UNKNOWN_ERROR = 0;
	private static final int ZZ_NO_MATCH = 1;
	private static final int ZZ_PUSHBACK_2BIG = 2;

	/* error messages for the codes above */
	private static final String ZZ_ERROR_MSG[] = {
			"Unkown internal scanner error", "Error: could not match input",
			"Error: pushback value was too large" };

	/** the input device */
	private java.io.Reader zzReader;

	/** the current state of the DFA */
	private int zzState;

	/** the current lexical state */
	private int zzLexicalState = YYINITIAL;

	/**
	 * this buffer contains the current text to be matched and is the source of
	 * the yytext() string
	 */
	private char zzBuffer[] = new char[ZZ_BUFFERSIZE];

	/** the textposition at the last accepting state */
	private int zzMarkedPos;

	/** the textposition at the last state to be included in yytext */
	private int zzPushbackPos;

	/** the current text position in the buffer */
	private int zzCurrentPos;

	/** startRead marks the beginning of the yytext() string in the buffer */
	private int zzStartRead;

	/**
	 * endRead marks the last character in the buffer, that has been read from
	 * input
	 */
	private int zzEndRead;

	/** number of newlines encountered up to the start of the matched text */
	// private int yyline;
	/** the number of characters up to the start of the matched text */
	private int yychar;

	/**
	 * the number of characters from the last newline up to the start of the
	 * matched text
	 */
	// private int yycolumn;
	/**
	 * zzAtBOL == true <=> the scanner is currently at the beginning of a line
	 */
	private boolean zzAtBOL = true;

	/** zzAtEOF == true <=> the scanner is at the EOF */
	private boolean zzAtEOF;

	/** denotes if the user-EOF-code has already been executed */
	private boolean zzEOFDone;

	/* user code: */

	private boolean hasMore = true;
	private final static int MAX_TO_SCAN = 8000;
	StringBuffer string = new StringBuffer();
	// state stack for easier state handling
	private IntStack fStateStack = new IntStack();
	private String valueText = null;
	private boolean isXHTML;
	private boolean isWML;

	public JSPHeadTokenizer() {
		super();
	}

	public void reset(Reader in) {
		/* the input device */
		zzReader = in;

		/* the current state of the DFA */
		zzState = 0;

		/* the current lexical state */
		zzLexicalState = YYINITIAL;

		/*
		 * this buffer contains the current text to be matched and is the source
		 * of the yytext() string
		 */
		java.util.Arrays.fill(zzBuffer, (char) 0);

		/* the textposition at the last accepting state */
		zzMarkedPos = 0;

		/* the textposition at the last state to be included in yytext */
		zzPushbackPos = 0;

		/* the current text position in the buffer */
		zzCurrentPos = 0;

		/* startRead marks the beginning of the yytext() string in the buffer */
		zzStartRead = 0;

		/**
		 * endRead marks the last character in the buffer, that has been read
		 * from input
		 */
		zzEndRead = 0;

		/* number of newlines encountered up to the start of the matched text */
		// yyline = 0;
		/* the number of characters up to the start of the matched text */
		yychar = 0;

		/**
		 * the number of characters from the last newline up to the start of the
		 * matched text
		 */
		// yycolumn = 0;
		/**
		 * yy_atBOL == true <=> the scanner is currently at the beginning of a
		 * line
		 */
		zzAtBOL = true;

		/* yy_atEOF == true <=> the scanner has returned a value for EOF */
		zzAtEOF = false;

		/* denotes if the user-EOF-code has already been executed */
		zzEOFDone = false;

		fStateStack.clear();

		hasMore = true;
		isXHTML = false;
		isWML = false;

	}

	public final HeadParserToken getNextToken() throws IOException {
		String context = null;
		context = primGetNextToken();
		HeadParserToken result = null;
		if (valueText != null) {
			result = createToken(context, yychar, valueText);
			valueText = null;
		} else {
			result = createToken(context, yychar, yytext());
		}
		return result;
	}

	public final boolean hasMoreTokens() {
		return hasMore && yychar < MAX_TO_SCAN;
	}

	private void pushCurrentState() {
		fStateStack.push(yystate());

	}

	private void popState() {
		yybegin(fStateStack.pop());
	}

	private HeadParserToken createToken(String context, int start, String text) {
		return new HeadParserToken(context, start, text);
	}

	public boolean isXHTML() {
		return isXHTML;
	}

	public boolean isWML() {
		return isWML;
	}

	/**
	 * Creates a new scanner There is also a java.io.InputStream version of this
	 * constructor.
	 * 
	 * @param in
	 *            the java.io.Reader to read input from.
	 */
	public JSPHeadTokenizer(java.io.Reader in) {
		this.zzReader = in;
	}

	/**
	 * Creates a new scanner. There is also java.io.Reader version of this
	 * constructor.
	 * 
	 * @param in
	 *            the java.io.Inputstream to read input from.
	 */
	public JSPHeadTokenizer(java.io.InputStream in) {
		this(new java.io.InputStreamReader(in));
	}

	/**
	 * Unpacks the compressed character translation table.
	 * 
	 * @param packed
	 *            the packed character translation table
	 * @return the unpacked character translation table
	 */
	private static char[] zzUnpackCMap(String packed) {
		char[] map = new char[0x10000];
		int i = 0; /* index in packed string */
		int j = 0; /* index in unpacked array */
		while (i < 192) {
			int count = packed.charAt(i++);
			char value = packed.charAt(i++);
			do {
				map[j++] = value;
			} while (--count > 0);
		}
		return map;
	}

	/**
	 * Refills the input buffer.
	 * 
	 * @return <code>false</code>, iff there was new input.
	 * 
	 * @exception java.io.IOException
	 *                if any I/O-Error occurs
	 */
	private boolean zzRefill() throws java.io.IOException {

		/* first: make room (if you can) */
		if (zzStartRead > 0) {
			System.arraycopy(zzBuffer, zzStartRead, zzBuffer, 0, zzEndRead
					- zzStartRead);

			/* translate stored positions */
			zzEndRead -= zzStartRead;
			zzCurrentPos -= zzStartRead;
			zzMarkedPos -= zzStartRead;
			zzPushbackPos -= zzStartRead;
			zzStartRead = 0;
		}

		/* is the buffer big enough? */
		if (zzCurrentPos >= zzBuffer.length) {
			/* if not: blow it up */
			char newBuffer[] = new char[zzCurrentPos * 2];
			System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
			zzBuffer = newBuffer;
		}

		/* finally: fill the buffer with new input */
		int numRead = zzReader.read(zzBuffer, zzEndRead, zzBuffer.length
				- zzEndRead);

		if (numRead < 0) {
			return true;
		} else {
			zzEndRead += numRead;
			return false;
		}
	}

	/**
	 * Closes the input stream.
	 */
	public final void yyclose() throws java.io.IOException {
		zzAtEOF = true; /* indicate end of file */
		zzEndRead = zzStartRead; /* invalidate buffer */

		if (zzReader != null) {
			zzReader.close();
		}
	}

	/**
	 * Resets the scanner to read from a new input stream. Does not close the
	 * old reader.
	 * 
	 * All internal variables are reset, the old input stream <b>cannot</b> be
	 * reused (internal buffer is discarded and lost). Lexical state is set to
	 * <tt>ZZ_INITIAL</tt>.
	 * 
	 * @param reader
	 *            the new input stream
	 */
	public final void yyreset(java.io.Reader reader) {
		zzReader = reader;
		zzAtBOL = true;
		zzAtEOF = false;
		zzEndRead = zzStartRead = 0;
		zzCurrentPos = zzMarkedPos = zzPushbackPos = 0;
		// yyline = yychar = yycolumn = 0;
		zzLexicalState = YYINITIAL;
	}

	/**
	 * Returns the current lexical state.
	 */
	public final int yystate() {
		return zzLexicalState;
	}

	/**
	 * Enters a new lexical state
	 * 
	 * @param newState
	 *            the new lexical state
	 */
	public final void yybegin(int newState) {
		zzLexicalState = newState;
	}

	/**
	 * Returns the text matched by the current regular expression.
	 */
	public final String yytext() {
		return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
	}

	/**
	 * Returns the character at position <tt>pos</tt> from the matched text.
	 * 
	 * It is equivalent to yytext().charAt(pos), but faster
	 * 
	 * @param pos
	 *            the position of the character to fetch. A value from 0 to
	 *            yylength()-1.
	 * 
	 * @return the character at position pos
	 */
	public final char yycharat(int pos) {
		return zzBuffer[zzStartRead + pos];
	}

	/**
	 * Returns the length of the matched text region.
	 */
	public final int yylength() {
		return zzMarkedPos - zzStartRead;
	}

	/**
	 * Reports an error that occured while scanning.
	 * 
	 * In a wellformed scanner (no or only correct usage of yypushback(int) and
	 * a match-all fallback rule) this method will only be called with things
	 * that "Can't Possibly Happen". If this method is called, something is
	 * seriously wrong (e.g. a JFlex bug producing a faulty scanner etc.).
	 * 
	 * Usual syntax/scanner level error handling should be done in error
	 * fallback rules.
	 * 
	 * @param errorCode
	 *            the code of the errormessage to display
	 */
	private void zzScanError(int errorCode) {
		String message;
		try {
			message = ZZ_ERROR_MSG[errorCode];
		} catch (ArrayIndexOutOfBoundsException e) {
			message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
		}

		throw new Error(message);
	}

	/**
	 * Pushes the specified amount of characters back into the input stream.
	 * 
	 * They will be read again by then next call of the scanning method
	 * 
	 * @param number
	 *            the number of characters to be read again. This number must
	 *            not be greater than yylength()!
	 */
	public void yypushback(int number) {
		if (number > yylength()) {
			zzScanError(ZZ_PUSHBACK_2BIG);
		}

		zzMarkedPos -= number;
	}

	/**
	 * Contains user EOF-code, which will be executed exactly once, when the end
	 * of file is reached
	 */
	private void zzDoEOF() {
		if (!zzEOFDone) {
			zzEOFDone = true;
			hasMore = false;

		}
	}

	/**
	 * Resumes scanning until the next regular expression is matched, the end of
	 * input is encountered or an I/O-Error occurs.
	 * 
	 * @return the next token
	 * @exception java.io.IOException
	 *                if any I/O-Error occurs
	 */
	public String primGetNextToken() throws java.io.IOException {
		int zzInput;
		int zzAction;

		// cached fields:
		int zzCurrentPosL;
		int zzMarkedPosL;
		int zzEndReadL = zzEndRead;
		char[] zzBufferL = zzBuffer;
		char[] zzCMapL = ZZ_CMAP;

		while (true) {
			zzMarkedPosL = zzMarkedPos;

			yychar += zzMarkedPosL - zzStartRead;

			if (zzMarkedPosL > zzStartRead) {
				switch (zzBufferL[zzMarkedPosL - 1]) {
				case '\n':
				case '\u000B':
				case '\u000C':
				case '\u0085':
				case '\u2028':
				case '\u2029':
					zzAtBOL = true;
					break;
				case '\r':
					if (zzMarkedPosL < zzEndReadL) {
						zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
					} else if (zzAtEOF) {
						zzAtBOL = false;
					} else {
						boolean eof = zzRefill();
						zzMarkedPosL = zzMarkedPos;
						zzBufferL = zzBuffer;
						if (eof) {
							zzAtBOL = false;
						} else {
							zzAtBOL = zzBufferL[zzMarkedPosL] != '\n';
						}
					}
					break;
				default:
					zzAtBOL = false;
				}
			}
			zzAction = -1;

			zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;

			if (zzAtBOL) {
				zzState = ZZ_LEXSTATE[zzLexicalState + 1];
			} else {
				zzState = ZZ_LEXSTATE[zzLexicalState];
			}

			zzForAction: {
				while (true) {

					if (zzCurrentPosL < zzEndReadL) {
						zzInput = zzBufferL[zzCurrentPosL++];
					} else if (zzAtEOF) {
						zzInput = YYEOF;
						break zzForAction;
					} else {
						// store back cached positions
						zzCurrentPos = zzCurrentPosL;
						zzMarkedPos = zzMarkedPosL;
						boolean eof = zzRefill();
						// get translated positions and possibly new buffer
						zzCurrentPosL = zzCurrentPos;
						zzMarkedPosL = zzMarkedPos;
						zzBufferL = zzBuffer;
						zzEndReadL = zzEndRead;
						if (eof) {
							zzInput = YYEOF;
							break zzForAction;
						} else {
							zzInput = zzBufferL[zzCurrentPosL++];
						}
					}
					zzInput = zzCMapL[zzInput];

					boolean zzIsFinal = false;
					boolean zzNoLookAhead = false;

					zzForNext: {
						switch (zzState) {
						case 0:
							switch (zzInput) {
							case 10:
								zzIsFinal = true;
								zzState = 9;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 8;
								break zzForNext;
							}

						case 1:
							switch (zzInput) {
							case 1:
								zzIsFinal = true;
								zzState = 10;
								break zzForNext;
							case 2:
								zzIsFinal = true;
								zzState = 11;
								break zzForNext;
							case 3:
								zzIsFinal = true;
								zzState = 12;
								break zzForNext;
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 13;
								break zzForNext;
							case 10:
								zzIsFinal = true;
								zzState = 14;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 8;
								break zzForNext;
							}

						case 2:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 15;
								break zzForNext;
							case 11:
								zzIsFinal = true;
								zzState = 16;
								break zzForNext;
							case 22:
								zzIsFinal = true;
								zzState = 17;
								break zzForNext;
							case 45:
								zzIsFinal = true;
								zzState = 18;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 8;
								break zzForNext;
							}

						case 3:
							switch (zzInput) {
							case 14:
								zzIsFinal = true;
								zzState = 19;
								break zzForNext;
							case 18:
								zzIsFinal = true;
								zzState = 20;
								break zzForNext;
							case 21:
								zzIsFinal = true;
								zzState = 21;
								break zzForNext;
							case 27:
								zzIsFinal = true;
								zzState = 22;
								break zzForNext;
							case 41:
								zzIsFinal = true;
								zzState = 23;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 8;
								break zzForNext;
							}

						case 4:
							switch (zzInput) {
							case 6:
							case 8:
							case 28:
								zzIsFinal = true;
								zzState = 25;
								break zzForNext;
							case 9:
								zzIsFinal = true;
								zzState = 26;
								break zzForNext;
							case 31:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 27;
								break zzForNext;
							case 32:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 28;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 24;
								break zzForNext;
							}

						case 5:
							switch (zzInput) {
							case 8:
							case 9:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 30;
								break zzForNext;
							case 11:
								zzIsFinal = true;
								zzState = 31;
								break zzForNext;
							case 31:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 32;
								break zzForNext;
							case 32:
								zzIsFinal = true;
								zzState = 33;
								break zzForNext;
							case 41:
								zzIsFinal = true;
								zzState = 34;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 29;
								break zzForNext;
							}

						case 6:
							switch (zzInput) {
							case 8:
							case 9:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 30;
								break zzForNext;
							case 41:
								zzIsFinal = true;
								zzState = 34;
								break zzForNext;
							case 32:
								zzIsFinal = true;
								zzState = 35;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 29;
								break zzForNext;
							}

						case 7:
							switch (zzInput) {
							case 11:
							case 41:
								zzIsFinal = true;
								zzState = 34;
								break zzForNext;
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 36;
								break zzForNext;
							case 31:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 37;
								break zzForNext;
							case 32:
								zzIsFinal = true;
								zzState = 38;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 29;
								break zzForNext;
							}

						case 9:
							switch (zzInput) {
							case 15:
								zzState = 39;
								break zzForNext;
							case 23:
								zzState = 40;
								break zzForNext;
							case 41:
								zzState = 41;
								break zzForNext;
							case 44:
								zzState = 42;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 10:
							switch (zzInput) {
							case 2:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 43;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 11:
							switch (zzInput) {
							case 1:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 44;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 12:
							switch (zzInput) {
							case 4:
								zzState = 45;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 13:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 46;
								break zzForNext;
							case 10:
								zzState = 47;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 14:
							switch (zzInput) {
							case 15:
								zzState = 39;
								break zzForNext;
							case 23:
								zzState = 40;
								break zzForNext;
							case 41:
								zzState = 41;
								break zzForNext;
							case 44:
								zzState = 42;
								break zzForNext;
							case 11:
								zzState = 48;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 15:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 49;
								break zzForNext;
							case 11:
								zzState = 50;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 16:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 51;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 17:
							switch (zzInput) {
							case 29:
								zzState = 52;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 18:
							switch (zzInput) {
							case 22:
								zzState = 53;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 19:
							switch (zzInput) {
							case 43:
								zzState = 54;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 20:
							switch (zzInput) {
							case 17:
								zzState = 55;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 21:
							switch (zzInput) {
							case 43:
								zzState = 56;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 22:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 57;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 23:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 58;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 25:
							switch (zzInput) {
							case 6:
							case 8:
							case 28:
								zzIsFinal = true;
								zzState = 25;
								break zzForNext;
							case 9:
								zzState = 59;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 24;
								break zzForNext;
							}

						case 26:
							switch (zzInput) {
							case 6:
							case 8:
							case 28:
								zzIsFinal = true;
								zzState = 25;
								break zzForNext;
							case 9:
								zzState = 59;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 24;
								break zzForNext;
							}

						case 31:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 60;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 33:
							switch (zzInput) {
							case 10:
								zzState = 61;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 34:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 62;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 35:
							switch (zzInput) {
							case 10:
								zzState = 61;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 38:
							switch (zzInput) {
							case 10:
								zzState = 61;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 39:
							switch (zzInput) {
							case 16:
								zzState = 63;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 40:
							switch (zzInput) {
							case 19:
								zzState = 64;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 41:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 41;
								break zzForNext;
							case 42:
								zzState = 65;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 42:
							switch (zzInput) {
							case 30:
								zzState = 66;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 45:
							switch (zzInput) {
							case 5:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 67;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 46:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 46;
								break zzForNext;
							case 10:
								zzState = 47;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 47:
							switch (zzInput) {
							case 11:
								zzState = 48;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 48:
							switch (zzInput) {
							case 12:
								zzState = 68;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 49:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 49;
								break zzForNext;
							case 11:
								zzState = 50;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 50:
							switch (zzInput) {
							case 46:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 51;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 52:
							switch (zzInput) {
							case 18:
								zzState = 69;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 53:
							switch (zzInput) {
							case 37:
								zzState = 70;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 54:
							switch (zzInput) {
							case 29:
								zzState = 71;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 55:
							switch (zzInput) {
							case 29:
								zzState = 72;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 56:
							switch (zzInput) {
							case 38:
								zzState = 73;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 59:
							switch (zzInput) {
							case 6:
							case 8:
							case 28:
								zzIsFinal = true;
								zzState = 25;
								break zzForNext;
							case 9:
								zzState = 59;
								break zzForNext;
							default:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 24;
								break zzForNext;
							}

						case 61:
							switch (zzInput) {
							case 32:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 30;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 63:
							switch (zzInput) {
							case 17:
								zzState = 74;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 64:
							switch (zzInput) {
							case 13:
								zzState = 75;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 65:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 65;
								break zzForNext;
							case 21:
								zzState = 76;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 66:
							switch (zzInput) {
							case 21:
								zzState = 77;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 68:
							switch (zzInput) {
							case 13:
								zzState = 78;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 69:
							switch (zzInput) {
							case 17:
								zzState = 79;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 70:
							switch (zzInput) {
							case 30:
								zzState = 80;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 71:
							switch (zzInput) {
							case 38:
								zzState = 81;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 72:
							switch (zzInput) {
							case 19:
								zzState = 82;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 73:
							switch (zzInput) {
							case 22:
								zzState = 83;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 74:
							switch (zzInput) {
							case 18:
								zzState = 84;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 75:
							switch (zzInput) {
							case 14:
								zzState = 85;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 76:
							switch (zzInput) {
							case 43:
								zzState = 86;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 77:
							switch (zzInput) {
							case 33:
								zzState = 87;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 78:
							switch (zzInput) {
							case 14:
								zzState = 88;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 79:
							switch (zzInput) {
							case 16:
								zzState = 89;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 80:
							switch (zzInput) {
							case 26:
								zzState = 90;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 81:
							switch (zzInput) {
							case 24:
								zzState = 91;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 82:
							switch (zzInput) {
							case 22:
								zzState = 92;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 83:
							switch (zzInput) {
							case 22:
								zzState = 93;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 84:
							switch (zzInput) {
							case 19:
								zzState = 94;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 85:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 85;
								break zzForNext;
							case 12:
								zzState = 95;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 86:
							switch (zzInput) {
							case 38:
								zzState = 96;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 87:
							switch (zzInput) {
							case 16:
								zzState = 97;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 88:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 98;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 89:
							switch (zzInput) {
							case 26:
								zzState = 99;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 90:
							switch (zzInput) {
							case 17:
								zzState = 100;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 91:
							switch (zzInput) {
							case 43:
								zzState = 101;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 92:
							switch (zzInput) {
							case 29:
								zzState = 102;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 93:
							switch (zzInput) {
							case 29:
								zzState = 103;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 94:
							switch (zzInput) {
							case 20:
								zzState = 104;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 95:
							switch (zzInput) {
							case 13:
								zzState = 105;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 96:
							switch (zzInput) {
							case 22:
								zzState = 106;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 97:
							switch (zzInput) {
							case 26:
								zzState = 107;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 98:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 98;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 99:
							switch (zzInput) {
							case 29:
								zzState = 108;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 100:
							switch (zzInput) {
							case 29:
								zzState = 109;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 101:
							switch (zzInput) {
							case 38:
								zzState = 110;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 102:
							switch (zzInput) {
							case 19:
								zzState = 111;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 103:
							switch (zzInput) {
							case 18:
								zzState = 112;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 104:
							switch (zzInput) {
							case 21:
								zzState = 113;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 105:
							switch (zzInput) {
							case 14:
								zzState = 114;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 106:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 115;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 107:
							switch (zzInput) {
							case 37:
								zzState = 116;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 108:
							switch (zzInput) {
							case 38:
								zzState = 117;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 109:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 109;
								break zzForNext;
							case 7:
								zzIsFinal = true;
								zzState = 118;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 110:
							switch (zzInput) {
							case 22:
								zzState = 119;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 111:
							switch (zzInput) {
							case 19:
								zzState = 120;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 112:
							switch (zzInput) {
							case 17:
								zzState = 121;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 113:
							switch (zzInput) {
							case 22:
								zzState = 122;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 114:
							switch (zzInput) {
							case 29:
								zzState = 123;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 115:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 115;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 116:
							switch (zzInput) {
							case 22:
								zzState = 124;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 117:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 117;
								break zzForNext;
							case 7:
								zzIsFinal = true;
								zzState = 125;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 118:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 118;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 119:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 119;
								break zzForNext;
							case 7:
								zzIsFinal = true;
								zzState = 126;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 120:
							switch (zzInput) {
							case 20:
								zzState = 127;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 121:
							switch (zzInput) {
							case 16:
								zzState = 128;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 122:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 122;
								break zzForNext;
							case 23:
								zzState = 129;
								break zzForNext;
							case 34:
								zzState = 130;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 123:
							switch (zzInput) {
							case 30:
								zzState = 131;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 124:
							switch (zzInput) {
							case 18:
								zzState = 132;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 125:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 125;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 126:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 126;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 127:
							switch (zzInput) {
							case 21:
								zzState = 133;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 128:
							switch (zzInput) {
							case 26:
								zzState = 134;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 129:
							switch (zzInput) {
							case 19:
								zzState = 135;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 130:
							switch (zzInput) {
							case 13:
								zzState = 136;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 131:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 131;
								break zzForNext;
							case 7:
								zzState = 137;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 132:
							switch (zzInput) {
							case 19:
								zzState = 138;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 133:
							switch (zzInput) {
							case 22:
								zzState = 139;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 134:
							switch (zzInput) {
							case 29:
								zzState = 140;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 135:
							switch (zzInput) {
							case 13:
								zzState = 141;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 136:
							switch (zzInput) {
							case 14:
								zzState = 142;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 137:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 137;
								break zzForNext;
							case 31:
							case 32:
								zzState = 143;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 138:
							switch (zzInput) {
							case 26:
								zzState = 144;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 139:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 139;
								break zzForNext;
							case 7:
								zzIsFinal = true;
								zzState = 145;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 140:
							switch (zzInput) {
							case 38:
								zzState = 146;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 141:
							switch (zzInput) {
							case 14:
								zzState = 147;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 142:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 142;
								break zzForNext;
							case 21:
								zzState = 148;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 143:
							switch (zzInput) {
							case 23:
								zzState = 149;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 144:
							switch (zzInput) {
							case 45:
								zzState = 150;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 145:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 145;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 146:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 146;
								break zzForNext;
							case 7:
								zzIsFinal = true;
								zzState = 151;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 147:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzState = 147;
								break zzForNext;
							case 21:
								zzState = 152;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 148:
							switch (zzInput) {
							case 24:
								zzState = 153;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 149:
							switch (zzInput) {
							case 19:
								zzState = 154;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 150:
							switch (zzInput) {
							case 22:
								zzState = 155;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 151:
							switch (zzInput) {
							case 6:
							case 8:
							case 9:
							case 28:
								zzIsFinal = true;
								zzState = 151;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 152:
							switch (zzInput) {
							case 24:
								zzState = 156;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 153:
							switch (zzInput) {
							case 25:
								zzState = 157;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 154:
							switch (zzInput) {
							case 19:
								zzState = 158;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 155:
							switch (zzInput) {
							case 35:
								zzState = 159;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 156:
							switch (zzInput) {
							case 25:
								zzState = 160;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 157:
							switch (zzInput) {
							case 14:
								zzState = 161;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 158:
							switch (zzInput) {
							case 21:
								zzState = 162;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 159:
							switch (zzInput) {
							case 21:
								zzState = 76;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 160:
							switch (zzInput) {
							case 14:
								zzState = 163;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 161:
							switch (zzInput) {
							case 26:
								zzState = 164;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 162:
							switch (zzInput) {
							case 33:
								zzState = 165;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 163:
							switch (zzInput) {
							case 26:
								zzState = 166;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 164:
							switch (zzInput) {
							case 18:
								zzState = 167;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 165:
							switch (zzInput) {
							case 27:
								zzState = 168;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 166:
							switch (zzInput) {
							case 18:
								zzState = 169;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 167:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 168:
							switch (zzInput) {
							case 27:
								zzState = 171;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 169:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 170:
							switch (zzInput) {
							case 27:
								zzState = 173;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 171:
							switch (zzInput) {
							case 34:
								zzState = 174;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 172:
							switch (zzInput) {
							case 27:
								zzState = 175;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 173:
							switch (zzInput) {
							case 27:
								zzState = 173;
								break zzForNext;
							case 16:
								zzState = 176;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 174:
							switch (zzInput) {
							case 34:
								zzState = 177;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 175:
							switch (zzInput) {
							case 27:
								zzState = 175;
								break zzForNext;
							case 16:
								zzState = 178;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 176:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 19:
								zzState = 179;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 177:
							switch (zzInput) {
							case 34:
								zzState = 180;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 178:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 19:
								zzState = 181;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 179:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 16:
								zzState = 182;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 180:
							switch (zzInput) {
							case 35:
								zzState = 183;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 181:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 16:
								zzState = 184;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 182:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 28:
								zzState = 185;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 183:
							switch (zzInput) {
							case 34:
								zzState = 186;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 184:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 28:
								zzState = 187;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 185:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 34:
								zzState = 188;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 186:
							switch (zzInput) {
							case 36:
								zzState = 189;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 187:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 12:
								zzState = 190;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 188:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 13:
								zzState = 191;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 189:
							switch (zzInput) {
							case 35:
								zzState = 192;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 190:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 23:
								zzState = 193;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 191:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 14:
								zzIsFinal = true;
								zzState = 194;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 192:
							switch (zzInput) {
							case 17:
								zzState = 195;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 193:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 19:
								zzState = 196;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 194:
							switch (zzInput) {
							case 27:
								zzState = 170;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 167;
								break zzForNext;
							}

						case 195:
							switch (zzInput) {
							case 37:
								zzState = 197;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 196:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 13:
								zzState = 198;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 197:
							switch (zzInput) {
							case 38:
								zzState = 199;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 198:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 14:
								zzIsFinal = true;
								zzState = 200;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 199:
							switch (zzInput) {
							case 27:
								zzState = 201;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 200:
							switch (zzInput) {
							case 27:
								zzState = 172;
								break zzForNext;
							case 9:
								break zzForAction;
							default:
								zzState = 169;
								break zzForNext;
							}

						case 201:
							switch (zzInput) {
							case 39:
								zzState = 202;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 202:
							switch (zzInput) {
							case 40:
								zzState = 203;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 203:
							switch (zzInput) {
							case 40:
								zzState = 204;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 204:
							switch (zzInput) {
							case 40:
								zzState = 205;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 205:
							switch (zzInput) {
							case 27:
								zzState = 206;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 206:
							switch (zzInput) {
							case 12:
								zzState = 207;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 207:
							switch (zzInput) {
							case 23:
								zzState = 208;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 208:
							switch (zzInput) {
							case 19:
								zzState = 209;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 209:
							switch (zzInput) {
							case 13:
								zzState = 210;
								break zzForNext;
							default:
								break zzForAction;
							}

						case 210:
							switch (zzInput) {
							case 14:
								zzIsFinal = true;
								zzNoLookAhead = true;
								zzState = 211;
								break zzForNext;
							default:
								break zzForAction;
							}

						default:
							// if this is ever reached, there is a serious bug
							// in JFlex
							zzScanError(ZZ_UNKNOWN_ERROR);
							break;
						}
					}

					if (zzIsFinal) {
						zzAction = zzState;
						zzMarkedPosL = zzCurrentPosL;
						if (zzNoLookAhead) {
							break zzForAction;
						}
					}

				}
			}

			// store back cached position
			zzMarkedPos = zzMarkedPosL;

			switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
			case 10: {
				if (yychar == 0) {
					hasMore = false;
					return EncodingParserConstants.UTF16BE;
				}
			}
			case 27:
				break;
			case 17: {
				if (yychar == 0) {
					hasMore = false;
					return EncodingParserConstants.UTF83ByteBOM;
				}
			}
			case 28:
				break;
			case 4: {
				yybegin(SQ_STRING);
				string.setLength(0);
			}
			case 29:
				break;
			case 5: {
				string.append(yytext());
			}
			case 30:
				break;
			case 22: {
				pushCurrentState();
				yybegin(QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageLanguage;
			}
			case 31:
				break;
			case 26: {
				isXHTML = true;
			}
			case 32:
				break;
			case 24: {
				pushCurrentState();
				yybegin(QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageEncoding;
			}
			case 33:
				break;
			case 1: {
				if (yychar > MAX_TO_SCAN) {
					hasMore = false;
					return EncodingParserConstants.MAX_CHARS_REACHED;
				}
			}
			case 34:
				break;
			case 11: {
				if (yychar == 0) {
					hasMore = false;
					return EncodingParserConstants.UTF16LE;
				}
			}
			case 35:
				break;
			case 6: {
				yypushback(1);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.InvalidTerminatedStringValue;
			}
			case 36:
				break;
			case 8: {
				yypushback(1);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.UnDelimitedStringValue;
			}
			case 37:
				break;
			case 9: {
				yypushback(1);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.InvalidTermintatedUnDelimitedStringValue;
			}
			case 38:
				break;
			case 7: {
				popState();
				valueText = string.toString();
				return EncodingParserConstants.StringValue;
			}
			case 39:
				break;
			case 14: {
				yybegin(YYINITIAL);
				return JSPHeadTokenizerConstants.PageDirectiveEnd;
			}
			case 40:
				break;
			case 23: {
				pushCurrentState();
				yybegin(QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageContentType;
			}
			case 41:
				break;
			case 18: {
				if (yychar == 0) {
					yybegin(ST_XMLDecl);
					return XMLHeadTokenizerConstants.XMLDeclStart;
				}
			}
			case 42:
				break;
			case 15: {
				yypushback(2);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.InvalidTerminatedStringValue;
			}
			case 43:
				break;
			case 2: {
				yypushback(1);
				yybegin(UnDelimitedString);
				string.setLength(0);
			}
			case 44:
				break;
			case 12: {
				yybegin(YYINITIAL);
				return XMLHeadTokenizerConstants.XMLDeclEnd;
			}
			case 45:
				break;
			case 13: {
				yybegin(YYINITIAL);
				return JSPHeadTokenizerConstants.PageDirectiveEnd;
			}
			case 46:
				break;
			case 25: {
				isWML = true;
			}
			case 47:
				break;
			case 19: {
				yybegin(ST_PAGE_DIRECTIVE);
				return JSPHeadTokenizerConstants.PageDirectiveStart;
			}
			case 48:
				break;
			case 21: {
				pushCurrentState();
				yybegin(QuotedAttributeValue);
				return XMLHeadTokenizerConstants.XMLDelEncoding;
			}
			case 49:
				break;
			case 20: {
				pushCurrentState();
				yybegin(QuotedAttributeValue);
				return XMLHeadTokenizerConstants.XMLDeclVersion;
			}
			case 50:
				break;
			case 16: {
				yypushback(2);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.InvalidTerminatedStringValue;
			}
			case 51:
				break;
			case 3: {
				yybegin(DQ_STRING);
				string.setLength(0);
			}
			case 52:
				break;
			default:
				if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
					zzAtEOF = true;
					zzDoEOF();
					{
						hasMore = false;
						return EncodingParserConstants.EOF;
					}
				} else {
					zzScanError(ZZ_NO_MATCH);
				}
			}
		}
	}

}
