/* 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 {
	
	public static final int	 DQ_STRING			= 8;
	
	private final static int	MAX_TO_SCAN		  = 8000;
	
	public static final int	 QuotedAttributeValue = 6;
	public static final int	 SQ_STRING			= 10;
	public static final int	 ST_PAGE_DIRECTIVE	= 4;
	public static final int	 ST_XMLDecl		   = 2;
	public static final int	 UnDelimitedString	= 12;
	/** This character denotes the end of file */
	public static final int	 YYEOF				= -1;
	/** lexical states */
	public static final int	 YYINITIAL			= 0;
	
	/**
	 * Translates DFA states to action switch labels.
	 */
	private static final int[]  ZZ_ACTION			= JSPHeadTokenizer.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";
	
	/** initial size of the lookahead buffer */
	private static final int	ZZ_BUFFERSIZE		= 8192;
	
	/**
	 * Translates characters to character classes
	 */
	private static final char[] ZZ_CMAP			  = JSPHeadTokenizer.zzUnpackCMap(JSPHeadTokenizer.ZZ_CMAP_PACKED);
	
	/**
	 * 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";
	
	/* 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" };
	
	/**
	 * 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 };
	
	private static final int	ZZ_NO_MATCH		  = 1;
	private static final int	ZZ_PUSHBACK_2BIG	 = 2;
	/* error codes */
	private static final int	ZZ_UNKNOWN_ERROR	 = 0;
	
	private static int[] zzUnpackAction() {
		int[] result = new int[212];
		int offset = 0;
		offset = JSPHeadTokenizer.zzUnpackAction(JSPHeadTokenizer.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;
	}
	
	/**
	 * 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;
	}
	
	// state stack for easier state handling
	private IntStack	   fStateStack	= new IntStack();
	
	private boolean		hasMore		= true;
	
	private boolean		isWML;
	
	private boolean		isXHTML;
	
	StringBuffer		   string		 = new StringBuffer();
	
	private String		 valueText	  = null;
	
	/** 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;
	
	/**
	 * this buffer contains the current text to be matched and is the source of
	 * the yytext() string
	 */
	private char		   zzBuffer[]	 = new char[JSPHeadTokenizer.ZZ_BUFFERSIZE];
	
	/** the current text position in the buffer */
	private int			zzCurrentPos;
	
	/* user code: */

	/**
	 * endRead marks the last character in the buffer, that has been read from
	 * input
	 */
	private int			zzEndRead;
	/** denotes if the user-EOF-code has already been executed */
	private boolean		zzEOFDone;
	/** the current lexical state */
	private int			zzLexicalState = JSPHeadTokenizer.YYINITIAL;
	/** 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 input device */
	private java.io.Reader zzReader;
	/** startRead marks the beginning of the yytext() string in the buffer */
	private int			zzStartRead;
	
	/** the current state of the DFA */
	private int			zzState;
	
	public JSPHeadTokenizer() {
		super();
	}
	
	/**
	 * 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));
	}
	
	/**
	 * 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;
	}
	
	private HeadParserToken createToken(String context, int start, String text) {
		return new HeadParserToken(context, start, text);
	}
	
	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 < JSPHeadTokenizer.MAX_TO_SCAN;
	}
	
	public boolean isWML() {
		return isWML;
	}
	
	public boolean isXHTML() {
		return isXHTML;
	}
	
	private void popState() {
		yybegin(fStateStack.pop());
	}
	
	/**
	 * 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 = JSPHeadTokenizer.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 = JSPHeadTokenizer.ZZ_LEXSTATE[zzLexicalState + 1];
			} else {
				zzState = JSPHeadTokenizer.ZZ_LEXSTATE[zzLexicalState];
			}
			
			zzForAction: {
				while (true) {
					
					if (zzCurrentPosL < zzEndReadL) {
						zzInput = zzBufferL[zzCurrentPosL++];
					} else if (zzAtEOF) {
						zzInput = JSPHeadTokenizer.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 = JSPHeadTokenizer.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(JSPHeadTokenizer.ZZ_UNKNOWN_ERROR);
							break;
						}
					}
					
					if (zzIsFinal) {
						zzAction = zzState;
						zzMarkedPosL = zzCurrentPosL;
						if (zzNoLookAhead) {
							break zzForAction;
						}
					}
					
				}
			}
			
			// store back cached position
			zzMarkedPos = zzMarkedPosL;
			
			switch (zzAction < 0 ? zzAction : JSPHeadTokenizer.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(JSPHeadTokenizer.SQ_STRING);
				string.setLength(0);
			}
			case 29:
				break;
			case 5: {
				string.append(yytext());
			}
			case 30:
				break;
			case 22: {
				pushCurrentState();
				yybegin(JSPHeadTokenizer.QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageLanguage;
			}
			case 31:
				break;
			case 26: {
				isXHTML = true;
			}
			case 32:
				break;
			case 24: {
				pushCurrentState();
				yybegin(JSPHeadTokenizer.QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageEncoding;
			}
			case 33:
				break;
			case 1: {
				if (yychar > JSPHeadTokenizer.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(JSPHeadTokenizer.YYINITIAL);
				return JSPHeadTokenizerConstants.PageDirectiveEnd;
			}
			case 40:
				break;
			case 23: {
				pushCurrentState();
				yybegin(JSPHeadTokenizer.QuotedAttributeValue);
				return JSPHeadTokenizerConstants.PageContentType;
			}
			case 41:
				break;
			case 18: {
				if (yychar == 0) {
					yybegin(JSPHeadTokenizer.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(JSPHeadTokenizer.UnDelimitedString);
				string.setLength(0);
			}
			case 44:
				break;
			case 12: {
				yybegin(JSPHeadTokenizer.YYINITIAL);
				return XMLHeadTokenizerConstants.XMLDeclEnd;
			}
			case 45:
				break;
			case 13: {
				yybegin(JSPHeadTokenizer.YYINITIAL);
				return JSPHeadTokenizerConstants.PageDirectiveEnd;
			}
			case 46:
				break;
			case 25: {
				isWML = true;
			}
			case 47:
				break;
			case 19: {
				yybegin(JSPHeadTokenizer.ST_PAGE_DIRECTIVE);
				return JSPHeadTokenizerConstants.PageDirectiveStart;
			}
			case 48:
				break;
			case 21: {
				pushCurrentState();
				yybegin(JSPHeadTokenizer.QuotedAttributeValue);
				return XMLHeadTokenizerConstants.XMLDelEncoding;
			}
			case 49:
				break;
			case 20: {
				pushCurrentState();
				yybegin(JSPHeadTokenizer.QuotedAttributeValue);
				return XMLHeadTokenizerConstants.XMLDeclVersion;
			}
			case 50:
				break;
			case 16: {
				yypushback(2);
				popState();
				valueText = string.toString();
				return EncodingParserConstants.InvalidTerminatedStringValue;
			}
			case 51:
				break;
			case 3: {
				yybegin(JSPHeadTokenizer.DQ_STRING);
				string.setLength(0);
			}
			case 52:
				break;
			default:
				if (zzInput == JSPHeadTokenizer.YYEOF && zzStartRead == zzCurrentPos) {
					zzAtEOF = true;
					zzDoEOF();
					{
						hasMore = false;
						return EncodingParserConstants.EOF;
					}
				} else {
					zzScanError(JSPHeadTokenizer.ZZ_NO_MATCH);
				}
			}
		}
	}
	
	private void pushCurrentState() {
		fStateStack.push(yystate());
		
	}
	
	public void reset(Reader in) {
		/* the input device */
		zzReader = in;
		
		/* the current state of the DFA */
		zzState = 0;
		
		/* the current lexical state */
		zzLexicalState = JSPHeadTokenizer.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;
		
	}
	
	/**
	 * Enters a new lexical state
	 * 
	 * @param newState
	 *            the new lexical state
	 */
	public final void yybegin(int newState) {
		zzLexicalState = newState;
	}
	
	/**
	 * 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];
	}
	
	/**
	 * 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();
		}
	}
	
	/**
	 * Returns the length of the matched text region.
	 */
	public final int yylength() {
		return zzMarkedPos - zzStartRead;
	}
	
	/**
	 * 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(JSPHeadTokenizer.ZZ_PUSHBACK_2BIG);
		}
		
		zzMarkedPos -= number;
	}
	
	/**
	 * 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 = JSPHeadTokenizer.YYINITIAL;
	}
	
	/**
	 * Returns the current lexical state.
	 */
	public final int yystate() {
		return zzLexicalState;
	}
	
	/**
	 * Returns the text matched by the current regular expression.
	 */
	public final String yytext() {
		return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
	}
	
	/**
	 * 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;
			
		}
	}
	
	/**
	 * 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;
		}
	}
	
	/**
	 * 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 = JSPHeadTokenizer.ZZ_ERROR_MSG[errorCode];
		} catch (ArrayIndexOutOfBoundsException e) {
			message = JSPHeadTokenizer.ZZ_ERROR_MSG[JSPHeadTokenizer.ZZ_UNKNOWN_ERROR];
		}
		
		throw new Error(message);
	}
	
}
