/* The following code was generated by JFlex 1.2.2 on 6/29/10 1:04 PM */

/*******************************************************************************
 * Copyright (c) 2004, 2010 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
 *     Frits Jalvingh - contributions for bug 150794
 *******************************************************************************/

package org.eclipse.jst.jsp.core.internal.parser.internal;

import java.io.CharArrayReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.eclipse.jst.jsp.core.internal.Logger;
import org.eclipse.jst.jsp.core.internal.regions.DOMJSPRegionContexts;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockMarker;
import org.eclipse.wst.sse.core.internal.ltk.parser.BlockTokenizer;
import org.eclipse.wst.sse.core.internal.ltk.parser.TagMarker;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegion;
import org.eclipse.wst.sse.core.internal.provisional.text.ITextRegionList;
import org.eclipse.wst.sse.core.internal.util.Debug;
import org.eclipse.wst.sse.core.utils.StringUtils;
import org.eclipse.wst.xml.core.internal.parser.ContextRegionContainer;
import org.eclipse.wst.xml.core.internal.parser.IntStack;


/**
 * This class is a scanner generated by 
 * <a href="http://www.informatik.tu-muenchen.de/~kleing/jflex/">JFlex</a> 1.2.2
 * on 6/29/10 1:04 PM from the specification file
 * <tt>file:/D:/dev/workspaces/wtp/org.eclipse.wst.sse.core/DevTimeSupport/SedModel/HTMLTokenizer/devel/JSPTokenizer.jflex</tt>
 */
public class JSPTokenizer implements BlockTokenizer, DOMJSPRegionContexts {

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

  /** lexical states */
  final public static int ST_JSP_VBL_DQUOTES = 52;
  final public static int ST_JSP_VBL_SQUOTES = 51;
  final public static int ST_JSP_VBL_SQUOTES_END = 53;
  final public static int ST_XML_COMMENT_END = 4;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE = 21;
  final public static int ST_JSP_EL_SQUOTES_END = 46;
  final public static int ST_JSP_EL_DQUOTES = 45;
  final public static int ST_JSP_EL = 43;
  final public static int ST_BLOCK_TAG_SCAN = 36;
  final public static int ST_JSP_EL_SQUOTES = 44;
  final public static int ST_DHTML_ATTRIBUTE_VALUE = 14;
  final public static int ST_XML_PI_ATTRIBUTE_NAME = 8;
  final public static int ST_DHTML_TAG_CLOSE = 15;
  final public static int ST_XML_ATTRIBUTE_VALUE_DQUOTED = 42;
  final public static int ST_DHTML_EQUALS = 13;
  final public static int ST_XML_PI_ATTRIBUTE_VALUE = 10;
  final public static int ST_XML_ATTRIBUTE_VALUE = 25;
  final public static int ST_JSP_VBL = 50;
  final public static int ST_JSP_SQUOTED_VBL = 56;
  final public static int ST_XML_ATTRIBUTE_VALUE_SQUOTED = 41;
  final public static int ST_XML_ATTRIBUTE_NAME = 23;
  final public static int ST_XML_EQUALS = 24;
  final public static int YYINITIAL = 0;
  final public static int ST_JSP_DIRECTIVE_ATTRIBUTE_NAME = 19;
  final public static int ST_JSP_CONTENT = 16;
  final public static int ST_XML_DOCTYPE_ID_SYSTEM = 31;
  final public static int ST_XML_ELEMENT_DECLARATION = 32;
  final public static int ST_XML_DECLARATION_CLOSE = 27;
  final public static int ST_JSP_DIRECTIVE_EQUALS = 20;
  final public static int ST_JSP_VBL_DQUOTES_END = 54;
  final public static int ST_JSP_DQUOTED_EL = 48;
  final public static int ST_XML_DOCTYPE_DECLARATION = 28;
  final public static int ST_CDATA_END = 2;
  final public static int ST_PI_WS = 6;
  final public static int ST_CDATA_TEXT = 1;
  final public static int ST_JSP_DIRECTIVE_NAME_WHITESPACE = 18;
  final public static int ST_XML_ELEMENT_DECLARATION_CONTENT = 33;
  final public static int ST_XML_ATTLIST_DECLARATION = 34;
  final public static int ST_JSP_EL_DQUOTES_END = 47;
  final public static int ST_JSP_SQUOTED_EL = 49;
  final public static int ST_JSP_COMMENT_END = 39;
  final public static int ST_XML_PI_EQUALS = 9;
  final public static int ST_XML_ATTLIST_DECLARATION_CONTENT = 35;
  final public static int ST_XML_DOCTYPE_ID_PUBLIC = 30;
  final public static int ST_JSP_DQUOTED_VBL = 55;
  final public static int ST_DHTML_ATTRIBUTE_NAME = 12;
  final public static int ST_ABORT_EMBEDDED = 37;
  final public static int ST_XML_DOCTYPE_EXTERNAL_ID = 29;
  final public static int ST_JSP_COMMENT = 38;
  final public static int ST_PI_CONTENT = 7;
  final public static int ST_BLOCK_TAG_INTERNAL_SCAN = 37;
  final public static int ST_PI = 5;
  final public static int ST_XML_DECLARATION = 26;
  final public static int ST_JSP_DIRECTIVE_NAME = 17;
  final public static int ST_XML_TAG_NAME = 22;
  final public static int ST_XML_PI_TAG_CLOSE = 11;
  final public static int ST_XML_COMMENT = 3;
  final public static int ST_JSP_ATTRIBUTE_VALUE = 40;

  /** 
   * Translates characters to character classes
   */
  final private static String yycmap_packed = 
    "\11\0\1\5\1\27\2\0\1\20\22\0\1\20\1\26\1\12\1\66"+
    "\1\15\1\23\1\13\1\14\1\25\1\25\1\25\1\25\1\25\1\7"+
    "\1\6\1\3\12\21\1\11\1\73\1\1\1\52\1\2\1\4\1\22"+
    "\1\41\1\74\1\37\1\40\1\56\1\71\1\63\1\63\1\64\1\63"+
    "\1\63\1\34\1\32\1\65\1\53\1\55\1\63\1\70\1\67\1\42"+
    "\1\72\2\63\1\30\1\54\1\63\1\36\1\17\1\24\1\0\1\10"+
    "\1\0\1\60\1\104\1\75\1\61\1\44\1\71\1\76\1\106\1\47"+
    "\1\101\1\63\1\35\1\33\1\51\1\50\1\102\1\63\1\45\1\46"+
    "\1\57\1\103\1\43\1\63\1\31\1\62\1\63\1\16\1\0\1\105"+
    "\71\0\1\100\10\0\27\77\1\0\37\77\1\0\72\77\2\0\13\77"+
    "\2\0\10\77\1\0\65\77\1\0\104\77\11\0\44\77\3\0\2\77"+
    "\4\0\36\77\70\0\131\77\22\0\7\77\16\0\2\100\56\0\106\100"+
    "\32\0\2\100\44\0\1\77\1\100\3\77\1\0\1\77\1\0\24\77"+
    "\1\0\54\77\1\0\7\77\3\0\1\77\1\0\1\77\1\0\1\77"+
    "\1\0\1\77\1\0\22\77\15\0\14\77\1\0\102\77\1\0\14\77"+
    "\1\0\44\77\1\0\4\100\11\0\65\77\2\0\2\77\2\0\2\77"+
    "\3\0\34\77\2\0\10\77\2\0\2\77\67\0\46\77\2\0\1\77"+
    "\7\0\46\77\12\0\21\100\1\0\27\100\1\0\3\100\1\0\1\100"+
    "\1\0\2\100\1\0\1\100\13\0\33\77\5\0\3\77\56\0\32\77"+
    "\5\0\1\100\12\77\10\100\15\0\12\100\6\0\1\100\107\77\2\0"+
    "\5\77\1\0\17\77\1\0\4\77\1\0\1\77\17\100\2\77\2\100"+
    "\1\0\4\100\2\0\12\100\u0207\0\3\100\1\0\65\77\2\0\1\100"+
    "\1\77\20\100\3\0\4\100\3\0\12\77\2\100\2\0\12\100\21\0"+
    "\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0\7\77\1\0"+
    "\1\77\3\0\4\77\2\0\1\100\1\0\7\100\2\0\2\100\2\0"+
    "\3\100\11\0\1\100\4\0\2\77\1\0\3\77\2\100\2\0\12\100"+
    "\2\77\20\0\1\100\2\0\6\77\4\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\1\0\2\77\1\0\2\77\2\0\1\100\1\0"+
    "\5\100\4\0\2\100\2\0\3\100\13\0\4\77\1\0\1\77\7\0"+
    "\12\100\2\100\3\77\14\0\3\100\1\0\7\77\1\0\1\77\1\0"+
    "\3\77\1\0\26\77\1\0\7\77\1\0\2\77\1\0\5\77\2\0"+
    "\1\100\1\77\10\100\1\0\3\100\1\0\3\100\22\0\1\77\5\0"+
    "\12\100\21\0\3\100\1\0\10\77\2\0\2\77\2\0\26\77\1\0"+
    "\7\77\1\0\2\77\2\0\4\77\2\0\1\100\1\77\6\100\3\0"+
    "\2\100\2\0\3\100\10\0\2\100\4\0\2\77\1\0\3\77\4\0"+
    "\12\100\22\0\2\100\1\0\6\77\3\0\3\77\1\0\4\77\3\0"+
    "\2\77\1\0\1\77\1\0\2\77\3\0\2\77\3\0\3\77\3\0"+
    "\10\77\1\0\3\77\4\0\5\100\3\0\3\100\1\0\4\100\11\0"+
    "\1\100\17\0\11\100\21\0\3\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\12\77\1\0\5\77\4\0\7\100\1\0\3\100\1\0"+
    "\4\100\7\0\2\100\11\0\2\77\4\0\12\100\22\0\2\100\1\0"+
    "\10\77\1\0\3\77\1\0\27\77\1\0\12\77\1\0\5\77\4\0"+
    "\7\100\1\0\3\100\1\0\4\100\7\0\2\100\7\0\1\77\1\0"+
    "\2\77\4\0\12\100\22\0\2\100\1\0\10\77\1\0\3\77\1\0"+
    "\27\77\1\0\20\77\4\0\6\100\2\0\3\100\1\0\4\100\11\0"+
    "\1\100\10\0\2\77\4\0\12\100\221\0\56\77\1\0\1\77\1\100"+
    "\2\77\7\100\5\0\6\77\1\100\10\100\1\0\12\100\47\0\2\77"+
    "\1\0\1\77\2\0\2\77\1\0\1\77\2\0\1\77\6\0\4\77"+
    "\1\0\7\77\1\0\3\77\1\0\1\77\1\0\1\77\2\0\2\77"+
    "\1\0\2\77\1\0\1\77\1\100\2\77\6\100\1\0\2\100\1\77"+
    "\2\0\5\77\1\0\1\100\1\0\6\100\2\0\12\100\76\0\2\100"+
    "\6\0\12\100\13\0\1\100\1\0\1\100\1\0\1\100\4\0\2\100"+
    "\10\77\1\0\41\77\7\0\24\100\1\0\6\100\4\0\6\100\1\0"+
    "\1\100\1\0\25\100\3\0\7\100\1\0\1\100\346\0\46\77\12\0"+
    "\47\77\11\0\1\77\1\0\2\77\1\0\3\77\1\0\1\77\1\0"+
    "\2\77\1\0\5\77\51\0\1\77\1\0\1\77\1\0\1\77\13\0"+
    "\1\77\1\0\1\77\1\0\1\77\3\0\2\77\3\0\1\77\5\0"+
    "\3\77\1\0\1\77\1\0\1\77\1\0\1\77\1\0\1\77\3\0"+
    "\2\77\3\0\2\77\1\0\1\77\50\0\1\77\11\0\1\77\2\0"+
    "\1\77\2\0\2\77\7\0\2\77\1\0\1\77\1\0\7\77\50\0"+
    "\1\77\4\0\1\77\10\0\1\77\u0c06\0\234\77\4\0\132\77\6\0"+
    "\26\77\2\0\6\77\2\0\46\77\2\0\6\77\2\0\10\77\1\0"+
    "\1\77\1\0\1\77\1\0\1\77\1\0\37\77\2\0\65\77\1\0"+
    "\7\77\1\0\1\77\3\0\3\77\1\0\7\77\3\0\4\77\2\0"+
    "\6\77\4\0\15\77\5\0\3\77\1\0\7\77\323\0\15\100\4\0"+
    "\1\100\104\0\1\77\3\0\2\77\2\0\1\77\121\0\3\77\u0e82\0"+
    "\1\100\1\0\1\77\31\0\11\77\6\100\1\0\5\100\13\0\124\77"+
    "\4\0\2\100\2\0\2\100\2\0\132\77\1\0\3\100\6\0\50\77"+
    "\u1cd3\0\u51a6\77\u0c5a\0\u2ba4\77\134\0\u0800\0\u1ffe\0\2\0";

  /** 
   * Translates characters to character classes
   */
  final private static char [] yycmap = yy_unpack_cmap(yycmap_packed);

  /** 
   * Translates a state to a row index in the transition table
   */
  final private static int yy_rowMap [] = { 
        0,    71,   142,   213,   284,   355,   426,   497,   568,   639, 
      710,   781,   852,   923,   994,  1065,  1136,  1207,  1278,  1349, 
     1420,  1491,  1562,  1633,  1704,  1775,  1846,  1917,  1988,  2059, 
     2130,  2201,  2272,  2343,  2414,  2485,  2556,  2627,  2698,  2769, 
     2840,  2911,  2982,  3053,  3124,  3195,  3266,  3337,  3408,  3479, 
     3550,  3621,  3692,  3763,  3834,  3905,  3976,  4047,  4118,  4189, 
     4260,  4331,  4402,  4473,  4544,  4615,  4544,  4615,  4686,  4544, 
     4544,  4615,  4757,  4828,  4899,  4970,  5041,  5112,  5183,  5254, 
     4544,  4615,  5325,  5396,  5467,  4544,  5538,  5538,  5609,  5680, 
     5751,  5325,  4544,  5822,  5893,  4544,  5964,  6035,  6106,  6177, 
     4544,  4615,  6248,  6319,  6390,  6461,  6532,  6603,  4544,  6674, 
     6674,  6745,  6816,  6887,  6958,  7029,  4544,  7100,  7171,  7242, 
     7313,  7384,  7455,  4544,  7526,  7597,  7668,  7739,  7810,  7881, 
     7952,  8023,  4544,  8094,  8165,  8236,  8307,  8378,  8449,  8520, 
     8591,  8591,  8662,  8733,  8804,  8875,  8875,  8946,  9017,  9088, 
     9159,  9159,  9230,  9301,  9372,  9443,  4544,  9514,  9514,  9585, 
     9656,  9727,  9798,  4544,  4544,  4615,  4544,  4615,  9869,  9940, 
     7597, 10011, 10082, 10153, 10224, 10295, 10366, 10437, 10508,  4544, 
    10579, 10650, 10721, 10792,  4544, 10863, 10934, 11005, 11076,  4544, 
     4544, 11147,  4544, 11218, 11289,  4544, 11218, 11360, 11431,  4544, 
    11360, 11502, 11573,  4544, 11644,  4544, 11715, 11786, 11857, 11928, 
    11999,  4544,  4544, 12070,  4544, 12141, 12212,  4544, 12141, 12283, 
    12354,  4544, 12283, 12425, 12496, 12567,  4544, 12638, 12709, 12780, 
     4544,  4544, 12851, 12922, 12993, 13064, 13135, 13206, 13277, 13348, 
    13419, 13490, 13561, 13632, 13703, 13774,  4544, 13845, 13916, 13987, 
     4544,  4544,  5538,  5680,  4544, 14058, 14129,  5751, 14200, 14271, 
     5822,  5964,  6035, 14342,  6106,  4544, 14413, 14484, 14555,  6177, 
    14626, 14697,  4544, 12922,  4544,  6674,  6745,  4544, 14768, 14839, 
     6816, 14910, 14981,  4544, 15052, 15123,  7526, 15194,  7739,  4544, 
    15265, 15336,  7810, 15407, 15478, 15549, 15620, 15691, 15762, 15833, 
     8307,  4544, 15904, 15975,  8591,  8662,  4544, 16046, 16117, 16188, 
    16259, 16330, 16401, 16472,  8804,  8591,  8875,  8946,  4544,  9017, 
     9088,  8875,  9159,  9230,  4544, 16543, 16614, 16685, 16756, 16827, 
    16898, 16969, 17040, 17111,  9514,  9585,  4544, 17182, 17253, 17324, 
    17395, 17466, 17537, 17608, 17679, 17750, 17821,  9940, 10082,  4544, 
    17892, 17963, 10153, 18034, 18105, 18176, 18247,  4544, 18318,  4544, 
     4544,  4544,  4544, 18389, 18460, 18531, 18602, 11218,  4544, 18673, 
    18744, 11360,  4544, 18815, 18886, 18957, 19028, 19099, 19170, 19241, 
    19312, 19383, 11928, 12141,  4544, 19454, 19525, 12283,  4544, 19596, 
    19667, 19738, 19809, 19880, 19951, 20022, 20093, 20164,  4544,  4544, 
     4544, 20235, 20306, 20377, 20448, 20519,  4544, 20590, 20661, 20732, 
     4544,  4544,  4544,  4544, 20803,  4544,  4544,  4970, 20874, 20945, 
    21016, 21087, 21158, 21229, 21300, 21371, 21442, 21513, 21584, 21655, 
    21726, 21797, 21868, 21939, 22010, 21939, 22081, 22152, 22081, 22223, 
    22294, 22365, 22436, 22507, 22578, 22649, 22720, 22720, 22791, 22862, 
    22933, 23004, 23004, 23075, 23146,  9372,  9372,  9372, 23217, 23288, 
    23359, 23430, 23430, 23501, 23572,  9727,  9727,  9727, 23643, 23714, 
    10082, 23785, 10153, 23856, 23927, 23927, 23998, 23998, 18531, 24069, 
    11005, 11005, 11005, 24140, 24211, 11218, 11218, 11218, 24282, 24353, 
    11360, 11360, 11360, 24424, 24495, 11502, 11502, 11502, 19099, 24566, 
    24637, 11715, 11715, 11715, 19312, 24708, 24779, 11928, 11928, 11928, 
    24850, 12141, 12141, 12141, 24921, 24992, 12283, 12283, 12283, 25063, 
    25134, 12425, 12425, 12425, 19880, 25205, 25276, 12638, 12638, 12638, 
    20093, 25347,  4544,  4544, 25418, 25489,  4544, 25560, 25631, 25702, 
    25773, 25844, 25915,  7526,  4544,  4544, 25986, 26057, 26128, 26199, 
    26270, 16330, 16827,  9372, 26341, 17466,  9727, 26412,  4544,  9940, 
    11005, 11218, 26483, 11360, 26554, 11502, 26625,  4544, 11715, 26696, 
    11928, 12141, 26767, 12283, 26838, 12425, 26909,  4544, 12638, 26980, 
    27051, 27122, 27193, 27264, 27335, 27406, 27477, 27548, 27619, 27690, 
    27761, 27832, 27903, 27974, 28045, 28116, 28187, 28258, 28329, 28400, 
    28471, 28542,  4970, 28613, 28684, 28755, 28826, 28897,  4544,  4544, 
    28968, 29039, 29110, 29181, 19099, 19312, 29252, 29323, 19880, 20093, 
    29394, 29465, 29536, 29607,  4544,  4544,  4544, 29678, 29749, 29820, 
    29891, 29962, 30033, 30104, 30175,  7242, 30246, 30317, 30388, 30459, 
    30530, 30601, 30672,  4544, 30743, 30814,  9372,  9727, 11218, 11360, 
    12141, 12283, 30885, 30956, 31027, 31098, 31169, 31240, 31311, 31382, 
     4970, 31453, 31524, 31595, 31666, 31737, 31808, 31879, 31950, 32021, 
    32092, 32163, 32234, 32305, 32376, 32447, 32518, 32589, 32660, 32731, 
    32802, 32873, 32944, 33015, 33086, 33157, 33228, 33299, 33370, 33441, 
    33512, 33583, 33654, 33725, 33796, 33867, 33938,  4544, 34009, 34080, 
    34151, 34222,  7242, 34293, 34364, 34435, 34506, 34577, 34648, 34719, 
    34790, 34861, 34932, 35003, 35074, 35145, 35216
  };

  /** 
   * The packed transition table of the DFA
   */
  final private static String yy_packed = 
    "\1\72\1\73\11\72\1\74\1\72\1\75\1\72\1\76"+
    "\3\72\1\77\42\72\1\100\20\72\1\101\1\102\105\101"+
    "\1\103\1\104\22\103\1\105\2\103\1\106\57\103\1\107"+
    "\1\110\105\107\1\103\1\104\5\103\1\111\17\103\1\106"+
    "\60\103\1\104\2\103\1\112\1\113\2\103\2\114\6\103"+
    "\1\113\6\103\1\113\1\115\1\116\4\114\1\103\10\114"+
    "\1\117\2\114\1\103\11\114\1\117\1\114\1\103\4\114"+
    "\1\103\4\114\1\103\4\114\1\103\1\114\1\103\1\104"+
    "\2\103\1\112\1\120\12\103\1\120\6\103\1\120\57\103"+
    "\1\121\1\122\2\121\1\123\22\121\1\106\57\121\1\103"+
    "\1\104\2\103\1\124\1\113\2\103\2\125\6\103\1\113"+
    "\6\103\1\113\6\125\1\103\13\125\1\103\13\125\1\103"+
    "\4\125\1\103\4\125\1\103\4\125\1\103\1\125\1\103"+
    "\1\104\2\103\1\124\1\113\2\103\2\125\6\103\1\113"+
    "\6\103\1\113\6\125\1\103\13\125\1\126\13\125\1\103"+
    "\4\125\1\103\4\125\1\103\4\125\1\103\1\125\1\127"+
    "\1\104\1\103\1\130\1\131\1\113\4\127\1\132\1\127"+
    "\1\133\3\127\1\113\6\127\1\113\57\127\1\103\1\104"+
    "\2\103\1\134\22\103\1\106\60\103\1\104\1\135\1\136"+
    "\1\103\1\113\2\103\2\137\6\103\1\113\6\103\1\113"+
    "\6\137\1\103\13\137\1\103\13\137\1\103\4\137\1\103"+
    "\4\137\1\103\4\137\1\103\1\137\1\103\1\104\1\135"+
    "\1\136\1\103\1\113\2\103\2\137\6\103\1\113\6\103"+
    "\1\113\6\137\1\103\13\137\1\140\13\137\1\103\4\137"+
    "\1\103\4\137\1\103\4\137\1\103\1\137\1\141\1\104"+
    "\1\135\1\142\1\141\1\113\4\141\1\143\1\141\1\144"+
    "\3\141\1\113\6\141\1\113\57\141\1\103\1\104\3\103"+
    "\1\113\12\103\1\113\6\103\1\113\57\103\1\145\1\146"+
    "\21\145\1\147\63\145\1\103\1\150\3\103\1\113\2\103"+
    "\2\151\6\103\1\113\2\103\1\152\3\103\1\113\6\151"+
    "\1\103\13\151\1\103\13\151\1\103\4\151\1\103\4\151"+
    "\1\103\4\151\1\103\1\151\1\103\1\150\3\103\1\153"+
    "\12\103\1\153\2\103\1\152\3\103\1\153\60\103\1\150"+
    "\3\103\1\113\2\103\2\154\6\103\1\113\2\103\1\152"+
    "\3\103\1\113\6\154\1\103\13\154\1\103\13\154\1\103"+
    "\4\154\1\103\4\154\1\103\4\154\1\103\1\154\1\103"+
    "\1\150\3\103\1\113\2\103\2\154\6\103\1\113\2\103"+
    "\1\152\3\103\1\113\6\154\1\103\13\154\1\155\13\154"+
    "\1\103\4\154\1\103\4\154\1\103\4\154\1\103\1\154"+
    "\1\156\1\150\1\103\1\157\1\156\1\113\4\156\1\160"+
    "\1\156\1\161\3\156\1\113\2\156\1\162\3\156\1\113"+
    "\57\156\1\163\1\164\1\165\1\166\4\163\2\167\16\163"+
    "\6\170\1\163\13\170\1\163\13\170\1\163\4\170\1\163"+
    "\4\170\1\163\1\171\3\170\1\163\1\170\1\103\1\172"+
    "\1\165\1\166\1\103\1\113\2\103\2\173\6\103\1\113"+
    "\6\103\1\113\6\173\1\103\13\173\1\103\13\173\1\103"+
    "\4\173\1\103\4\173\1\103\4\173\1\103\1\173\1\103"+
    "\1\172\1\165\1\166\1\103\1\113\2\103\2\173\6\103"+
    "\1\113\6\103\1\113\6\173\1\103\13\173\1\174\13\173"+
    "\1\103\4\173\1\103\4\173\1\103\4\173\1\103\1\173"+
    "\1\175\1\176\1\165\1\177\1\175\1\113\4\175\1\200"+
    "\1\175\1\201\1\202\2\175\1\113\6\175\1\113\36\175"+
    "\1\203\20\175\1\103\1\204\1\205\2\103\1\113\12\103"+
    "\1\113\6\103\1\113\10\103\1\206\1\207\2\103\1\210"+
    "\11\103\1\210\1\103\1\207\1\206\26\103\1\104\1\205"+
    "\2\103\1\113\12\103\1\113\6\103\1\113\6\103\1\211"+
    "\51\103\1\104\1\205\2\103\1\113\2\103\2\212\6\103"+
    "\1\113\6\103\1\113\6\212\1\211\13\212\1\103\13\212"+
    "\1\103\4\212\1\103\4\212\1\103\4\212\1\103\1\212"+
    "\1\103\1\104\1\205\2\103\1\113\12\103\1\113\6\103"+
    "\1\113\6\103\1\211\7\103\1\213\6\103\1\214\11\103"+
    "\1\213\12\103\1\214\4\103\1\215\1\104\1\205\1\216"+
    "\1\215\1\113\4\215\1\217\1\215\1\220\3\215\1\113"+
    "\6\215\1\113\6\215\1\221\50\215\1\222\1\104\1\205"+
    "\1\223\1\222\1\113\4\222\1\224\1\222\1\225\3\222"+
    "\1\113\6\222\1\113\6\222\1\226\50\222\1\227\1\104"+
    "\1\205\1\230\1\227\1\113\4\227\1\231\1\227\1\232"+
    "\3\227\1\113\6\227\1\113\57\227\1\233\1\234\1\235"+
    "\104\233\1\236\1\104\1\205\1\237\1\236\1\113\4\236"+
    "\1\240\1\236\1\241\3\236\1\113\6\236\1\113\57\236"+
    "\1\242\1\243\1\244\104\242\1\245\1\246\105\245\1\103"+
    "\1\104\25\103\1\106\57\103\1\247\1\250\105\247\1\103"+
    "\1\104\5\103\1\251\17\103\1\106\57\103\1\252\1\253"+
    "\1\165\1\254\1\252\1\113\4\252\1\255\1\252\1\256"+
    "\1\257\2\252\1\113\6\252\1\113\36\252\1\260\20\252"+
    "\1\261\1\262\3\261\1\263\6\261\1\264\1\265\2\261"+
    "\1\263\6\261\1\263\36\261\1\266\20\261\1\267\1\262"+
    "\3\267\1\270\4\267\1\271\2\267\1\272\2\267\1\270"+
    "\6\267\1\270\36\267\1\273\20\267\1\274\1\275\10\274"+
    "\1\276\1\274\1\277\1\300\67\274\1\301\1\274\1\302"+
    "\1\303\12\302\1\304\12\302\1\305\57\302\1\306\1\307"+
    "\10\306\1\310\14\306\1\311\57\306\1\103\1\104\12\103"+
    "\1\304\12\103\1\106\60\103\1\104\10\103\1\310\14\103"+
    "\1\106\57\103\1\312\1\313\10\312\1\314\4\312\1\315"+
    "\65\312\1\316\1\312\1\317\1\320\12\317\1\264\2\317"+
    "\1\321\65\317\1\316\1\317\1\322\1\323\10\322\1\324"+
    "\1\322\1\325\51\322\1\326\16\322\1\327\1\322\1\330"+
    "\1\331\12\330\1\332\12\330\1\333\57\330\1\334\1\335"+
    "\10\334\1\336\14\334\1\337\57\334\1\103\1\104\12\103"+
    "\1\332\12\103\1\106\60\103\1\104\10\103\1\336\14\103"+
    "\1\106\57\103\1\340\1\341\10\340\1\314\4\340\1\342"+
    "\65\340\1\343\1\340\1\344\1\345\12\344\1\264\2\344"+
    "\1\346\65\344\1\343\1\344\1\72\1\0\11\72\1\0"+
    "\1\72\1\0\5\72\1\0\42\72\1\0\20\72\3\0"+
    "\1\347\1\350\16\0\1\351\2\0\1\352\65\0\1\353"+
    "\2\0\2\354\6\0\1\353\6\0\1\353\6\354\1\0"+
    "\13\354\1\0\13\354\1\355\4\354\1\0\4\354\1\0"+
    "\4\354\1\0\1\354\1\72\1\0\11\72\1\0\1\72"+
    "\1\356\1\357\4\72\1\0\64\72\1\0\11\72\1\0"+
    "\1\72\1\360\5\72\1\0\42\72\1\360\20\72\5\0"+
    "\1\353\2\0\2\361\6\0\1\353\6\0\1\353\6\361"+
    "\1\0\13\361\1\0\13\361\1\0\4\361\1\0\4\361"+
    "\1\0\4\361\1\0\1\361\1\72\1\0\11\72\1\0"+
    "\2\72\1\362\4\72\1\0\42\72\1\363\20\72\132\0"+
    "\1\351\2\0\1\364\104\0\1\365\71\0\1\366\101\0"+
    "\1\367\111\0\1\113\12\0\1\113\6\0\1\113\65\0"+
    "\4\114\7\0\1\114\6\0\6\114\1\0\13\114\1\0"+
    "\13\114\1\0\4\114\1\0\11\114\1\0\1\114\6\0"+
    "\4\114\7\0\1\114\6\0\2\114\2\370\2\114\1\0"+
    "\13\114\1\0\13\114\1\0\4\114\1\0\11\114\1\0"+
    "\1\114\6\0\4\114\7\0\1\114\6\0\2\114\1\370"+
    "\1\371\2\114\1\0\13\114\1\0\13\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\0\4\114\7\0\1\114"+
    "\6\0\2\114\2\372\2\114\1\0\13\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\5\0\1\120"+
    "\12\0\1\120\6\0\1\120\61\0\1\373\106\0\1\374"+
    "\112\0\4\125\7\0\1\125\6\0\6\125\1\0\13\125"+
    "\1\0\13\125\1\0\4\125\1\0\11\125\1\0\1\125"+
    "\1\127\2\0\1\375\1\127\1\0\4\127\1\0\1\127"+
    "\1\0\3\127\1\0\6\127\1\0\60\127\1\0\1\374"+
    "\1\375\1\127\1\0\4\127\1\0\1\127\1\0\3\127"+
    "\1\0\6\127\1\0\57\127\1\376\1\0\10\376\1\377"+
    "\2\376\1\u0100\1\376\1\u0101\46\376\1\u0100\20\376\1\u0102"+
    "\1\0\12\u0102\1\377\1\u0103\1\u0102\1\u0104\46\u0102\1\u0103"+
    "\20\u0102\2\0\1\135\1\u0105\111\0\4\137\7\0\1\137"+
    "\6\0\6\137\1\0\13\137\1\0\13\137\1\0\4\137"+
    "\1\0\11\137\1\0\1\137\1\141\2\0\1\u0106\1\141"+
    "\1\0\4\141\1\0\1\141\1\0\3\141\1\0\6\141"+
    "\1\0\60\141\1\0\1\135\1\u0107\1\141\1\0\4\141"+
    "\1\0\1\141\1\0\3\141\1\0\6\141\1\0\57\141"+
    "\1\143\1\0\1\u0108\1\u0109\1\143\1\u0108\4\143\1\u010a"+
    "\1\143\1\u0108\1\u010b\1\143\1\u010c\1\u0108\6\143\1\u0108"+
    "\36\143\1\u010b\20\143\1\144\1\0\1\u010d\1\u010e\1\144"+
    "\1\u010d\4\144\1\u010d\1\144\1\u010a\1\u010f\1\144\1\u0110"+
    "\1\u010d\6\144\1\u010d\36\144\1\u010f\20\144\2\0\1\u0111"+
    "\127\0\1\351\2\0\1\u0112\66\0\4\151\7\0\1\151"+
    "\6\0\6\151\1\0\13\151\1\0\13\151\1\0\4\151"+
    "\1\0\11\151\1\0\1\151\2\0\1\u0113\111\0\1\153"+
    "\12\0\1\153\6\0\1\153\65\0\4\154\7\0\1\154"+
    "\6\0\6\154\1\0\13\154\1\0\13\154\1\0\4\154"+
    "\1\0\11\154\1\0\1\154\1\156\2\0\1\u0114\1\156"+
    "\1\0\4\156\1\0\1\156\1\0\3\156\1\0\6\156"+
    "\1\0\57\156\1\u0115\1\0\10\u0115\1\u0116\2\u0115\1\u0117"+
    "\1\u0115\1\u0118\46\u0115\1\u0117\20\u0115\1\u0119\1\0\12\u0119"+
    "\1\u0116\1\u011a\1\u0119\1\u011b\46\u0119\1\u011a\20\u0119\1\156"+
    "\1\0\1\u0113\1\u0114\1\156\1\0\4\156\1\0\1\156"+
    "\1\0\3\156\1\0\6\156\1\0\57\156\1\163\3\0"+
    "\24\163\6\0\1\163\13\0\1\163\13\0\1\163\4\0"+
    "\1\163\4\0\1\163\4\0\1\163\4\0\1\347\17\0"+
    "\1\351\2\0\1\352\62\0\1\u011c\104\0\1\163\3\0"+
    "\2\163\4\167\7\163\1\167\6\163\6\170\1\163\13\170"+
    "\1\163\13\170\1\163\4\170\1\163\4\170\1\167\4\170"+
    "\1\163\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\7\170\1\u011d\3\170\1\0\13\170\1\0\4\170"+
    "\1\0\11\170\1\0\1\170\3\0\1\347\4\0\2\u011e"+
    "\11\0\1\351\2\0\1\352\1\0\6\u011e\1\0\13\u011e"+
    "\1\0\13\u011e\1\0\4\u011e\1\0\4\u011e\1\0\4\u011e"+
    "\1\0\1\u011e\6\0\4\173\7\0\1\173\6\0\6\173"+
    "\1\0\13\173\1\0\13\173\1\0\4\173\1\0\11\173"+
    "\1\0\1\173\1\175\2\0\1\u011f\1\175\1\0\4\175"+
    "\1\0\1\175\1\0\3\175\1\0\6\175\1\0\57\175"+
    "\3\0\1\347\4\0\2\u0120\11\0\1\351\2\0\1\352"+
    "\1\0\6\u0120\1\0\13\u0120\1\0\13\u0120\1\0\4\u0120"+
    "\1\0\4\u0120\1\0\4\u0120\1\0\1\u0120\1\175\1\0"+
    "\1\u011c\1\u011f\1\175\1\0\4\175\1\0\1\175\1\0"+
    "\3\175\1\0\6\175\1\0\57\175\1\u0121\1\0\10\u0121"+
    "\1\u0122\2\u0121\1\u0123\1\u0121\1\u0124\46\u0121\1\u0123\20\u0121"+
    "\1\u0125\1\0\12\u0125\1\u0122\1\u0126\1\u0125\1\u0127\46\u0125"+
    "\1\u0126\20\u0125\1\175\2\0\1\u011f\1\175\1\0\4\175"+
    "\1\0\1\175\1\0\1\175\1\u0128\1\175\1\0\6\175"+
    "\1\0\60\175\2\0\1\u011f\1\175\1\0\4\175\1\0"+
    "\1\175\1\0\1\175\1\u0129\1\175\1\0\6\175\1\0"+
    "\57\175\3\0\1\347\17\0\1\351\2\0\1\u0112\130\0"+
    "\1\u012a\2\0\1\u012a\75\0\1\u012b\14\0\1\u012b\63\0"+
    "\2\u012c\51\0\24\u012d\1\u012e\62\u012d\6\0\4\212\7\0"+
    "\1\212\6\0\6\212\1\0\13\212\1\0\13\212\1\0"+
    "\4\212\1\0\11\212\1\0\1\212\54\0\1\u012f\5\0"+
    "\1\u012f\116\0\1\u0130\10\0\1\u0130\3\0\1\215\2\0"+
    "\1\u0131\1\215\1\0\4\215\1\0\1\215\1\0\3\215"+
    "\1\0\6\215\1\0\57\215\1\u0132\1\0\10\u0132\1\u0133"+
    "\2\u0132\1\u0134\1\u0132\1\u0135\46\u0132\1\u0134\20\u0132\1\u0136"+
    "\1\0\1\u0136\2\u0137\1\u0136\4\u0137\2\u0136\1\u0138\1\u0139"+
    "\1\u0136\1\u013a\4\u0137\1\u0136\11\u0137\1\u0136\27\u0137\1\u0139"+
    "\10\u0137\2\u0136\4\u0137\1\u0136\1\u0137\1\221\2\u012d\1\u013b"+
    "\1\221\1\u012d\4\221\1\u012d\1\221\1\u012d\3\221\1\u012d"+
    "\3\221\1\u013c\2\221\1\u012d\57\221\1\222\2\0\1\u013d"+
    "\1\222\1\0\4\222\1\0\1\222\1\0\3\222\1\0"+
    "\6\222\1\0\57\222\12\u013e\1\u013f\74\u013e\14\u0140\1\u013f"+
    "\72\u0140\1\226\2\u012d\1\u0141\1\226\1\u012d\4\226\1\u012d"+
    "\1\226\1\u012d\3\226\1\u012d\3\226\1\u0142\2\226\1\u012d"+
    "\57\226\1\227\2\0\1\u0143\1\227\1\0\4\227\1\0"+
    "\1\227\1\0\3\227\1\0\6\227\1\0\57\227\1\u0144"+
    "\1\0\10\u0144\1\u0145\2\u0144\1\u0146\1\u0144\1\u0147\46\u0144"+
    "\1\u0146\20\u0144\1\u0148\1\0\1\u0148\2\u0149\1\u0148\4\u0149"+
    "\2\u0148\1\u014a\1\u014b\1\u0148\1\u014c\4\u0149\1\u0148\11\u0149"+
    "\1\u0148\27\u0149\1\u014b\10\u0149\2\u0148\4\u0149\1\u0148\1\u0149"+
    "\2\233\1\0\106\233\1\0\20\233\1\u014d\2\233\1\u014e"+
    "\60\233\1\236\2\0\1\u014f\1\236\1\0\4\236\1\0"+
    "\1\236\1\0\3\236\1\0\6\236\1\0\57\236\1\u0150"+
    "\1\0\10\u0150\1\u0151\2\u0150\1\u0152\1\u0150\1\u0153\46\u0150"+
    "\1\u0152\20\u0150\1\u0154\1\0\1\u0154\2\u0155\1\u0154\4\u0155"+
    "\2\u0154\1\u0156\1\u0157\1\u0154\1\u0158\4\u0155\1\u0154\11\u0155"+
    "\1\u0154\27\u0155\1\u0157\10\u0155\2\u0154\4\u0155\1\u0154\1\u0155"+
    "\2\242\1\0\106\242\1\0\20\242\1\u0159\2\242\1\u015a"+
    "\60\242\7\0\1\u015b\77\0\1\252\2\0\1\u015c\1\252"+
    "\1\0\4\252\1\0\1\252\1\0\3\252\1\0\6\252"+
    "\1\0\60\252\1\0\1\u011c\1\u015c\1\252\1\0\4\252"+
    "\1\0\1\252\1\0\3\252\1\0\6\252\1\0\57\252"+
    "\1\u015d\1\0\10\u015d\1\u015e\2\u015d\1\u015f\1\u015d\1\u0160"+
    "\46\u015d\1\u015f\20\u015d\1\u0161\1\0\12\u0161\1\u015e\1\u0162"+
    "\1\u0161\1\u0163\46\u0161\1\u0162\20\u0161\1\252\2\0\1\u015c"+
    "\1\252\1\0\4\252\1\0\1\252\1\0\1\252\1\u0164"+
    "\1\252\1\0\6\252\1\0\60\252\2\0\1\u015c\1\252"+
    "\1\0\4\252\1\0\1\252\1\0\1\252\1\u0165\1\252"+
    "\1\0\6\252\1\0\57\252\1\261\1\0\12\261\2\0"+
    "\50\261\1\0\20\261\3\0\1\u0166\17\0\1\351\2\0"+
    "\1\364\60\0\1\261\1\0\3\261\1\263\6\261\2\0"+
    "\2\261\1\263\6\261\1\263\36\261\1\0\20\261\5\0"+
    "\1\u0167\10\0\1\u0168\1\0\1\u0167\6\0\1\u0167\64\0"+
    "\1\u0167\10\0\1\u0169\1\0\1\u0167\6\0\1\u0167\57\0"+
    "\1\267\1\0\10\267\1\0\2\267\1\0\50\267\1\0"+
    "\21\267\1\0\3\267\1\270\4\267\1\0\2\267\1\0"+
    "\2\267\1\270\6\267\1\270\36\267\1\0\20\267\5\0"+
    "\1\u0167\10\0\1\u016a\1\0\1\u0167\6\0\1\u0167\64\0"+
    "\1\u0167\10\0\1\u016b\1\0\1\u0167\6\0\1\u0167\57\0"+
    "\12\274\1\0\1\274\1\0\1\u016c\67\274\1\0\13\274"+
    "\1\0\1\274\1\0\1\u016c\5\274\1\u016d\61\274\1\0"+
    "\13\274\1\0\1\274\1\0\1\274\1\u016e\66\274\1\u016f"+
    "\1\274\14\u0170\1\u0171\106\u0170\1\u0171\6\u0170\1\u0172\2\u0170"+
    "\1\u0173\60\u0170\12\u0174\1\u0175\106\u0174\1\u0175\10\u0174\1\u0176"+
    "\2\u0174\1\u0177\60\u0174\12\312\1\0\4\312\1\u0178\65\312"+
    "\1\0\13\312\1\0\4\312\1\u0178\3\312\1\u0179\61\312"+
    "\1\0\13\312\1\u017a\74\312\14\317\1\0\2\317\1\u017b"+
    "\65\317\1\0\15\317\1\0\2\317\1\u017b\3\317\1\u017c"+
    "\61\317\1\0\15\317\1\u017d\72\317\12\322\1\0\1\322"+
    "\1\0\70\322\1\0\13\322\1\0\1\322\1\0\6\322"+
    "\1\u017e\61\322\1\0\13\322\1\0\1\322\1\0\1\322"+
    "\1\u017f\66\322\1\0\1\322\14\u0180\1\u0181\106\u0180\1\u0181"+
    "\6\u0180\1\u0182\2\u0180\1\u0183\60\u0180\12\u0184\1\u0185\106\u0184"+
    "\1\u0185\10\u0184\1\u0186\2\u0184\1\u0187\60\u0184\12\340\1\0"+
    "\4\340\1\u0188\65\340\1\0\13\340\1\0\4\340\1\u0188"+
    "\3\340\1\u0189\61\340\1\0\13\340\1\u018a\74\340\14\344"+
    "\1\0\2\344\1\u018b\65\344\1\0\15\344\1\0\2\344"+
    "\1\u018b\3\344\1\u018c\61\344\1\0\15\344\1\u018d\72\344"+
    "\7\0\1\u018e\12\0\1\u018f\3\0\1\u0190\23\0\1\u0191"+
    "\43\0\1\u0192\26\0\1\u0193\55\0\1\353\2\0\2\u0194"+
    "\6\0\1\353\6\0\1\353\6\u0194\1\0\13\u0194\1\0"+
    "\13\u0194\1\0\4\u0194\1\0\4\u0194\1\0\4\u0194\1\0"+
    "\1\u0194\1\u0195\1\0\3\u0195\1\u0196\4\354\1\u0195\1\0"+
    "\4\u0195\1\u0196\1\354\1\u0195\1\0\3\u0195\1\u0196\6\354"+
    "\1\u0195\13\354\1\u0195\13\354\1\u0195\4\354\1\u0197\11\354"+
    "\1\u0195\1\354\21\0\1\u0198\7\0\1\u0199\55\0\1\72"+
    "\1\0\11\72\1\0\1\72\1\u019a\5\72\1\0\42\72"+
    "\1\0\20\72\105\357\1\u019b\1\357\16\0\1\u019c\70\0"+
    "\1\u0195\1\0\3\u0195\1\u0196\4\361\1\u0195\1\0\4\u0195"+
    "\1\u0196\1\361\1\u0195\1\0\3\u0195\1\u0196\6\361\1\u0195"+
    "\13\361\1\u0195\13\361\1\u0195\4\361\1\u019d\11\361\1\u0195"+
    "\1\361\105\362\1\u019e\1\362\1\72\1\0\11\72\1\0"+
    "\1\72\1\0\5\72\1\0\42\72\1\u019f\20\72\36\0"+
    "\1\u0193\52\0\1\u01a0\106\0\1\u01a1\112\0\4\114\7\0"+
    "\1\114\6\0\4\114\2\u01a2\1\0\13\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\4\114"+
    "\7\0\1\114\6\0\4\114\1\u01a2\1\u01a3\1\0\13\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\6\0\4\114\7\0\1\114\6\0\6\114\1\0\13\114"+
    "\1\0\2\114\1\u01a4\10\114\1\0\4\114\1\0\6\114"+
    "\1\u01a4\2\114\1\0\1\114\12\376\1\377\3\376\1\0"+
    "\71\376\1\0\10\376\1\377\2\376\1\u01a5\1\376\1\u0101"+
    "\46\376\1\u01a5\20\376\14\u0102\1\377\1\u0102\1\0\71\u0102"+
    "\1\0\12\u0102\1\377\1\u01a6\1\u0102\1\u0104\46\u0102\1\u01a6"+
    "\20\u0102\1\u0108\1\0\10\u0108\1\u010a\2\u0108\1\u01a7\1\u0108"+
    "\1\u01a8\46\u0108\1\u01a7\20\u0108\1\143\2\u0108\1\u0109\1\143"+
    "\1\u0108\4\143\1\u010a\1\143\1\u0108\1\143\1\141\1\143"+
    "\1\u0108\6\143\1\u0108\60\143\1\0\1\u0108\1\u0109\1\143"+
    "\1\u0108\4\143\1\u010a\1\143\1\u0108\1\u01a9\1\143\1\u010c"+
    "\1\u0108\6\143\1\u0108\36\143\1\u01a9\20\143\1\u010d\1\0"+
    "\12\u010d\1\u010a\1\u01aa\1\u010d\1\u01ab\46\u010d\1\u01aa\20\u010d"+
    "\1\144\2\u010d\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144"+
    "\1\u010a\1\144\1\141\1\144\1\u010d\6\144\1\u010d\60\144"+
    "\1\0\1\u010d\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144"+
    "\1\u010a\1\u01ac\1\144\1\u0110\1\u010d\6\144\1\u010d\36\144"+
    "\1\u01ac\20\144\12\u0115\1\u0116\3\u0115\1\0\71\u0115\1\0"+
    "\10\u0115\1\u0116\2\u0115\1\u01ad\1\u0115\1\u0118\46\u0115\1\u01ad"+
    "\20\u0115\14\u0119\1\u0116\1\u0119\1\0\71\u0119\1\0\12\u0119"+
    "\1\u0116\1\u01ae\1\u0119\1\u011b\46\u0119\1\u01ae\20\u0119\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\13\170\1\0"+
    "\13\170\1\0\4\170\1\0\6\170\1\u01af\2\170\1\0"+
    "\1\170\6\0\4\u011e\7\0\1\u011e\6\0\6\u011e\1\0"+
    "\13\u011e\1\0\13\u011e\1\0\4\u011e\1\0\11\u011e\1\0"+
    "\1\u011e\6\0\4\u0120\7\0\1\u0120\6\0\6\u0120\1\0"+
    "\13\u0120\1\0\13\u0120\1\0\4\u0120\1\0\11\u0120\1\0"+
    "\1\u0120\12\u0121\1\u0122\3\u0121\1\0\71\u0121\1\0\10\u0121"+
    "\1\u0122\2\u0121\1\u01b0\1\u0121\1\u0124\46\u0121\1\u01b0\20\u0121"+
    "\14\u0125\1\u0122\1\u0125\1\0\71\u0125\1\0\12\u0125\1\u0122"+
    "\1\u01b1\1\u0125\1\u0127\46\u0125\1\u01b1\20\u0125\1\u01b2\2\u01b3"+
    "\1\u01b4\1\u01b2\1\u01b3\4\u01b2\1\u01b3\1\u01b2\1\u01b3\3\u01b2"+
    "\1\u01b3\6\u01b2\1\u01b3\55\u01b2\1\175\1\u01b2\1\u01b5\2\u01b6"+
    "\1\u01b7\1\u01b5\1\u01b6\4\u01b5\1\u01b6\1\u01b5\1\u01b6\3\u01b5"+
    "\1\u01b6\6\u01b5\1\u01b6\55\u01b5\1\175\1\u01b5\37\0\1\u01b8"+
    "\35\0\1\u01b8\53\0\1\u01b9\14\0\1\u01b9\73\0\1\u01ba"+
    "\11\0\1\u01ba\76\0\1\u01bb\20\0\1\u01bb\113\0\1\u01bc"+
    "\7\0\1\u01bc\2\0\12\u0132\1\u0133\3\u0132\1\0\71\u0132"+
    "\1\0\10\u0132\1\u0133\2\u0132\1\u01bd\1\u0132\1\u0135\46\u0132"+
    "\1\u01bd\20\u0132\1\u0136\1\0\12\u0136\1\u0133\1\u01be\1\u0136"+
    "\1\u013a\46\u0136\1\u01be\21\u0136\1\0\12\u0136\1\u01bf\1\u01be"+
    "\1\u0136\1\u013a\46\u0136\1\u01be\20\u0136\14\0\1\u01c0\72\0"+
    "\14\u0136\1\u01bf\1\u0136\1\0\71\u0136\1\0\12\u0136\1\u0133"+
    "\1\u01c1\1\u0136\1\u013a\46\u0136\1\u01c1\20\u0136\12\u0144\1\u0145"+
    "\3\u0144\1\0\71\u0144\1\0\10\u0144\1\u0145\2\u0144\1\u01c2"+
    "\1\u0144\1\u0147\46\u0144\1\u01c2\20\u0144\1\u0148\1\0\12\u0148"+
    "\1\u0145\1\u01c3\1\u0148\1\u014c\46\u0148\1\u01c3\21\u0148\1\0"+
    "\12\u0148\1\u01c4\1\u01c3\1\u0148\1\u014c\46\u0148\1\u01c3\20\u0148"+
    "\14\0\1\u01c5\72\0\14\u0148\1\u01c4\1\u0148\1\0\71\u0148"+
    "\1\0\12\u0148\1\u0145\1\u01c6\1\u0148\1\u014c\46\u0148\1\u01c6"+
    "\20\u0148\2\233\1\0\4\233\1\u01c7\12\233\1\u01c8\3\233"+
    "\1\u01c9\23\233\1\u01ca\36\233\1\0\33\233\1\u01cb\50\233"+
    "\12\u0150\1\u0151\3\u0150\1\0\71\u0150\1\0\10\u0150\1\u0151"+
    "\2\u0150\1\u01cc\1\u0150\1\u0153\46\u0150\1\u01cc\20\u0150\1\u0154"+
    "\1\0\12\u0154\1\u0151\1\u01cd\1\u0154\1\u0158\46\u0154\1\u01cd"+
    "\21\u0154\1\0\12\u0154\1\u01ce\1\u01cd\1\u0154\1\u0158\46\u0154"+
    "\1\u01cd\20\u0154\14\0\1\u01cf\72\0\14\u0154\1\u01ce\1\u0154"+
    "\1\0\71\u0154\1\0\12\u0154\1\u0151\1\u01d0\1\u0154\1\u0158"+
    "\46\u0154\1\u01d0\20\u0154\2\242\1\0\4\242\1\u01d1\12\242"+
    "\1\u01d2\3\242\1\u01d3\23\242\1\u01d4\36\242\1\0\33\242"+
    "\1\u01d5\50\242\23\0\1\u01d6\63\0\12\u015d\1\u015e\3\u015d"+
    "\1\0\71\u015d\1\0\10\u015d\1\u01d7\2\u015d\1\u01d8\1\u015d"+
    "\1\u0160\46\u015d\1\u01d8\20\u015d\14\u0161\1\u015e\1\u0161\1\0"+
    "\71\u0161\1\0\12\u0161\1\u01d9\1\u01da\1\u0161\1\u0163\46\u0161"+
    "\1\u01da\20\u0161\1\u01db\2\u01b3\1\u01dc\1\u01db\1\u01b3\4\u01db"+
    "\1\u01b3\1\u01db\1\u01b3\3\u01db\1\u01b3\6\u01db\1\u01b3\55\u01db"+
    "\1\252\1\u01db\1\u01dd\2\u01b6\1\u01de\1\u01dd\1\u01b6\4\u01dd"+
    "\1\u01b6\1\u01dd\1\u01b6\3\u01dd\1\u01b6\6\u01dd\1\u01b6\55\u01dd"+
    "\1\252\1\u01dd\5\0\1\u0167\12\0\1\u0167\6\0\1\u0167"+
    "\57\0\12\274\1\0\1\274\1\0\1\274\1\u01df\66\274"+
    "\1\u016f\10\274\1\u01e0\2\274\1\0\1\274\1\0\1\u016c"+
    "\4\274\1\u01e1\3\274\1\u01e2\23\274\1\u01e3\32\274\1\0"+
    "\1\274\12\u01df\1\0\1\u01df\1\0\70\u01df\1\0\1\u01df"+
    "\12\u016f\1\0\1\u016f\1\0\1\u01e4\67\u016f\1\0\1\u016f"+
    "\7\u0170\1\u01e5\4\u0170\1\u0171\5\u0170\1\u01e6\3\u0170\1\u01e7"+
    "\23\u0170\1\u01e8\50\u0170\1\u0171\21\u0170\1\u01e9\50\u0170\7\u0174"+
    "\1\u01ea\2\u0174\1\u0175\7\u0174\1\u01eb\3\u0174\1\u01ec\23\u0174"+
    "\1\u01ed\46\u0174\1\u0175\23\u0174\1\u01ee\50\u0174\12\312\1\0"+
    "\103\312\1\u01ef\2\312\1\0\4\312\1\u0178\2\312\1\u01f0"+
    "\3\312\1\u01f1\23\312\1\u01f2\32\312\1\0\1\312\17\u01f3"+
    "\1\u01f4\67\u01f3\14\317\1\0\101\317\1\u01f5\4\317\1\0"+
    "\2\317\1\u017b\2\317\1\u01f6\3\317\1\u01f7\23\317\1\u01f8"+
    "\32\317\1\0\1\317\17\u01f9\1\u01fa\67\u01f9\7\322\1\u01fb"+
    "\2\322\1\0\1\322\1\0\5\322\1\u01fc\3\322\1\u01fd"+
    "\23\322\1\u01fe\32\322\1\0\1\322\7\u0180\1\u01ff\4\u0180"+
    "\1\u0181\5\u0180\1\u0200\3\u0180\1\u0201\23\u0180\1\u0202\50\u0180"+
    "\1\u0181\21\u0180\1\u0203\50\u0180\7\u0184\1\u0204\2\u0184\1\u0185"+
    "\7\u0184\1\u0205\3\u0184\1\u0206\23\u0184\1\u0207\46\u0184\1\u0185"+
    "\23\u0184\1\u0208\50\u0184\12\340\1\0\103\340\1\u0209\2\340"+
    "\1\0\4\340\1\u0188\2\340\1\u020a\3\340\1\u020b\23\340"+
    "\1\u020c\32\340\1\0\1\340\17\u020d\1\u020e\67\u020d\14\344"+
    "\1\0\101\344\1\u020f\4\344\1\0\2\344\1\u018b\2\344"+
    "\1\u0210\3\344\1\u0211\23\344\1\u0212\32\344\1\0\1\344"+
    "\17\u0213\1\u0214\67\u0213\7\0\1\u0215\106\0\1\u0216\136\0"+
    "\1\u0217\47\0\1\u0194\1\0\11\u0194\1\0\7\u0194\1\0"+
    "\63\u0194\1\u0195\1\0\11\u0195\1\0\7\u0195\1\0\47\u0195"+
    "\1\0\14\u0195\1\0\3\u0195\1\u0196\5\u0195\1\0\4\u0195"+
    "\1\u0196\2\u0195\1\0\3\u0195\1\u0196\43\u0195\1\u0218\13\u0195"+
    "\21\0\1\u0198\51\0\1\u0219\34\0\1\u021a\15\0\3\u021a"+
    "\2\0\1\u021a\11\0\1\u021a\1\0\2\u021a\7\0\1\u021a"+
    "\2\0\2\u021a\6\0\1\u021a\17\0\1\u019a\157\0\1\u019f"+
    "\26\0\1\114\1\u021b\2\114\7\0\1\114\6\0\6\114"+
    "\1\0\13\114\1\0\13\114\1\0\4\114\1\0\11\114"+
    "\1\0\1\114\6\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\11\114\1\u021c\1\114\1\0\1\u021c\12\114\1\0"+
    "\4\114\1\0\11\114\1\0\1\114\12\376\1\377\74\376"+
    "\14\u0102\1\377\72\u0102\12\u0108\1\u010a\3\u0108\1\0\71\u0108"+
    "\1\0\10\u0108\1\u010a\2\u0108\1\u021d\1\u0108\1\u01a8\46\u0108"+
    "\1\u021d\20\u0108\1\143\2\u0108\1\u0109\1\143\1\u0108\4\143"+
    "\1\u010a\1\143\1\u0108\3\143\1\u0108\6\143\1\u0108\57\143"+
    "\14\u010d\1\u010a\1\u010d\1\0\71\u010d\1\0\12\u010d\1\u010a"+
    "\1\u021e\1\u010d\1\u01ab\46\u010d\1\u021e\20\u010d\1\144\2\u010d"+
    "\1\u010e\1\144\1\u010d\4\144\1\u010d\1\144\1\u010a\3\144"+
    "\1\u010d\6\144\1\u010d\57\144\12\u0115\1\u0116\74\u0115\14\u0119"+
    "\1\u0116\72\u0119\6\0\3\170\1\u021f\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\12\u0121\1\u0122\74\u0121\14\u0125\1\u0122"+
    "\72\u0125\1\u01b2\2\u01b3\1\u01b4\1\u01b2\1\u01b3\4\u01b2\1\u01b3"+
    "\1\u01b2\1\u01b3\3\u01b2\1\u01b3\6\u01b2\1\u01b3\55\u01b2\1\u0220"+
    "\1\u01b2\105\u01b3\1\u0221\1\u01b3\1\u01b5\2\u01b6\1\u01b7\1\u01b5"+
    "\1\u01b6\4\u01b5\1\u01b6\1\u01b5\1\u01b6\3\u01b5\1\u01b6\6\u01b5"+
    "\1\u01b6\55\u01b5\1\u0220\1\u01b5\105\u01b6\1\u0222\1\u01b6\42\0"+
    "\1\u0223\14\0\1\u0223\63\0\2\u0224\103\0\2\u0225\115\0"+
    "\1\u0226\14\0\1\u0226\63\0\2\u0227\51\0\12\u0132\1\u0133"+
    "\74\u0132\14\u0136\1\u0133\1\u0136\1\0\70\u0136\3\0\2\u0228"+
    "\1\0\4\u0228\2\0\1\u0138\1\u0228\2\0\4\u0228\1\0"+
    "\11\u0228\1\0\40\u0228\2\0\4\u0228\1\0\1\u0228\14\u0136"+
    "\1\u0133\72\u0136\12\u0144\1\u0145\74\u0144\14\u0148\1\u0145\1\u0148"+
    "\1\0\70\u0148\3\0\2\u0229\1\0\4\u0229\2\0\1\u014a"+
    "\1\u0229\2\0\4\u0229\1\0\11\u0229\1\0\40\u0229\2\0"+
    "\4\u0229\1\0\1\u0229\14\u0148\1\u0145\72\u0148\2\233\1\0"+
    "\4\233\1\u022a\101\233\1\0\34\233\1\u022b\47\233\12\u0150"+
    "\1\u0151\74\u0150\14\u0154\1\u0151\1\u0154\1\0\70\u0154\3\0"+
    "\2\u022c\1\0\4\u022c\2\0\1\u0156\1\u022c\2\0\4\u022c"+
    "\1\0\11\u022c\1\0\40\u022c\2\0\4\u022c\1\0\1\u022c"+
    "\14\u0154\1\u0151\72\u0154\2\242\1\0\4\242\1\u022d\101\242"+
    "\1\0\34\242\1\u022e\47\242\2\0\1\u022f\104\0\12\u015d"+
    "\1\u015e\74\u015d\14\u0161\1\u015e\72\u0161\1\u01db\2\u01b3\1\u01dc"+
    "\1\u01db\1\u01b3\4\u01db\1\u01b3\1\u01db\1\u01b3\3\u01db\1\u01b3"+
    "\6\u01db\1\u01b3\55\u01db\1\u0230\1\u01db\1\u01dd\2\u01b6\1\u01de"+
    "\1\u01dd\1\u01b6\4\u01dd\1\u01b6\1\u01dd\1\u01b6\3\u01dd\1\u01b6"+
    "\6\u01dd\1\u01b6\55\u01dd\1\u0230\1\u01dd\7\274\1\u0231\2\274"+
    "\1\0\1\274\1\0\1\u016c\67\274\1\0\1\274\12\u016f"+
    "\1\0\1\u016f\1\0\1\u016f\1\0\70\u016f\7\u0170\1\u0232"+
    "\4\u0170\1\u0171\106\u0170\1\u0171\22\u0170\1\u0233\47\u0170\7\u0174"+
    "\1\u0234\2\u0174\1\u0175\106\u0174\1\u0175\24\u0174\1\u0235\47\u0174"+
    "\7\312\1\u0236\2\312\1\0\4\312\1\u0178\65\312\1\0"+
    "\1\312\12\u0237\1\u0238\72\u0237\1\0\1\u0237\7\317\1\u0239"+
    "\4\317\1\0\2\317\1\u017b\65\317\1\0\1\317\14\u023a"+
    "\1\u0238\70\u023a\1\0\1\u023a\7\322\1\u023b\2\322\1\0"+
    "\1\322\1\0\70\322\1\0\1\322\7\u0180\1\u023c\4\u0180"+
    "\1\u0181\106\u0180\1\u0181\22\u0180\1\u023d\47\u0180\7\u0184\1\u023e"+
    "\2\u0184\1\u0185\106\u0184\1\u0185\24\u0184\1\u023f\47\u0184\7\340"+
    "\1\u0240\2\340\1\0\4\340\1\u0188\65\340\1\0\1\340"+
    "\12\u0241\1\u0242\72\u0241\1\0\1\u0241\7\344\1\u0243\4\344"+
    "\1\0\2\344\1\u018b\65\344\1\0\1\344\14\u0244\1\u0242"+
    "\70\u0244\1\0\1\u0244\40\0\1\u0245\141\0\1\u0218\34\0"+
    "\1\u021a\15\0\3\u021a\2\0\1\u021a\11\0\1\u021a\1\0"+
    "\2\u021a\7\0\1\u021a\1\0\1\u0219\2\u021a\6\0\1\u021a"+
    "\10\0\4\114\7\0\1\114\6\0\6\114\1\0\7\114"+
    "\1\u0246\3\114\1\0\13\114\1\0\4\114\1\0\11\114"+
    "\1\0\1\114\6\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\6\114\1\u0247\4\114\1\0\13\114\1\0\1\114"+
    "\1\u0247\2\114\1\0\11\114\1\0\1\114\12\u0108\1\u010a"+
    "\74\u0108\14\u010d\1\u010a\72\u010d\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\6\170\1\u0248\4\170\1\0\6\170"+
    "\1\u0249\4\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\54\0\1\u024a\5\0\1\u024a\73\0\1\u024b\14\0\1\u024b"+
    "\66\0\1\u024c\11\0\1\u024c\74\0\1\u024d\11\0\1\u024d"+
    "\77\0\1\u024e\14\0\1\u024e\22\0\2\233\1\0\35\233"+
    "\1\u024f\46\233\2\242\1\0\35\242\1\u0250\46\242\14\u0170"+
    "\1\u0171\23\u0170\1\u0251\46\u0170\12\u0174\1\u0175\25\u0174\1\u0252"+
    "\46\u0174\12\u0237\1\u01f3\4\u0237\1\u0253\65\u0237\1\u01f3\1\u0237"+
    "\14\u023a\1\u01f9\2\u023a\1\u0254\65\u023a\1\u01f9\1\u023a\14\u0180"+
    "\1\u0181\23\u0180\1\u0255\46\u0180\12\u0184\1\u0185\25\u0184\1\u0256"+
    "\46\u0184\12\u0241\1\u020d\4\u0241\1\u0257\65\u0241\1\u020d\1\u0241"+
    "\14\u0244\1\u0213\2\u0244\1\u0258\65\u0244\1\u0213\1\u0244\41\0"+
    "\1\u0259\53\0\4\114\7\0\1\114\6\0\6\114\1\0"+
    "\13\114\1\0\4\114\1\u025a\6\114\1\0\4\114\1\0"+
    "\11\114\1\0\1\114\6\0\4\114\7\0\1\114\6\0"+
    "\6\114\1\0\3\114\1\u025b\7\114\1\0\4\114\1\u025b"+
    "\6\114\1\0\4\114\1\0\11\114\1\0\1\114\6\0"+
    "\4\170\7\0\1\170\6\0\6\170\1\0\11\170\1\u025c"+
    "\1\170\1\0\13\170\1\0\4\170\1\0\11\170\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\10\170\1\u025d\2\170\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\55\0\1\u025e\24\0\1\u025e\52\0"+
    "\1\u025f\20\0\1\u025f\70\0\1\u0260\13\0\1\u0260\53\0"+
    "\2\u0261\112\0\1\u0262\35\0\1\u0262\11\0\2\233\1\0"+
    "\36\233\1\u0263\45\233\2\242\1\0\36\242\1\u0264\45\242"+
    "\14\u0170\1\u0171\24\u0170\1\u0265\45\u0170\12\u0174\1\u0175\26\u0174"+
    "\1\u0266\45\u0174\12\u0237\1\u0267\4\u0237\1\u0253\65\u0237\1\u01f3"+
    "\1\u0237\14\u023a\1\u0268\2\u023a\1\u0254\65\u023a\1\u01f9\1\u023a"+
    "\14\u0180\1\u0181\24\u0180\1\u0269\45\u0180\12\u0184\1\u0185\26\u0184"+
    "\1\u026a\45\u0184\12\u0241\1\u026b\4\u0241\1\u0257\65\u0241\1\u020d"+
    "\1\u0241\14\u0244\1\u026c\2\u0244\1\u0258\65\u0244\1\u0213\1\u0244"+
    "\42\0\1\u026d\52\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\13\114\1\0\7\114\1\u026e\3\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\11\170\1\u026f\1\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\6\170\1\u0270\4\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\44\0\1\u0271\11\0\1\u0271\72\0\1\u0272\14\0\1\u0272"+
    "\71\0\1\u0273\14\0\1\u0273\27\0\2\233\1\0\37\233"+
    "\1\u0274\44\233\2\242\1\0\37\242\1\u0275\44\242\14\u0170"+
    "\1\u0171\25\u0170\1\u0276\44\u0170\12\u0174\1\u0175\27\u0174\1\u0277"+
    "\44\u0174\14\u0180\1\u0181\25\u0180\1\u0278\44\u0180\12\u0184\1\u0185"+
    "\27\u0184\1\u0279\44\u0184\41\0\1\u027a\53\0\4\114\7\0"+
    "\1\114\6\0\5\114\1\u027b\1\0\13\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\4\170"+
    "\1\u027c\6\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\5\170"+
    "\1\u027d\5\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\2\233\1\0\36\233\1\u027e\45\233\2\242"+
    "\1\0\36\242\1\u027f\45\242\14\u0170\1\u0171\24\u0170\1\u0280"+
    "\45\u0170\12\u0174\1\u0175\26\u0174\1\u0281\45\u0174\14\u0180\1\u0181"+
    "\24\u0180\1\u0282\45\u0180\12\u0184\1\u0185\26\u0184\1\u0283\45\u0184"+
    "\36\0\1\u0284\56\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\5\114\1\u0285\5\114\1\0\13\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\13\170\1\0\13\170\1\0\4\170"+
    "\1\0\1\170\1\u0286\7\170\1\0\1\170\2\233\1\0"+
    "\33\233\1\u0287\50\233\2\242\1\0\33\242\1\u0288\50\242"+
    "\14\u0170\1\u0171\21\u0170\1\u0289\50\u0170\12\u0174\1\u0175\23\u0174"+
    "\1\u028a\50\u0174\14\u0180\1\u0181\21\u0180\1\u028b\50\u0180\12\u0184"+
    "\1\u0185\23\u0184\1\u028c\50\u0184\6\0\4\114\7\0\1\114"+
    "\6\0\6\114\1\0\7\114\1\u028d\3\114\1\0\13\114"+
    "\1\0\4\114\1\0\11\114\1\0\1\114\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\4\170"+
    "\1\u028e\6\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\4\114\7\0\1\114\6\0\6\114\1\0\13\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\u028f"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\10\170"+
    "\1\u0290\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\5\114\1\u0291\5\114\1\0\13\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\4\170\1\u0292\6\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\114"+
    "\7\0\1\114\6\0\6\114\1\0\5\114\1\u0293\5\114"+
    "\1\0\13\114\1\0\4\114\1\0\11\114\1\0\1\114"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\5\170"+
    "\1\u0294\5\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\114\7\0\1\114\6\0\6\114"+
    "\1\0\13\114\1\0\4\114\1\u0295\6\114\1\0\4\114"+
    "\1\0\11\114\1\0\1\114\6\u0296\4\u0297\7\u0296\1\u0297"+
    "\5\u0296\1\0\6\u0297\1\u0296\13\u0297\1\u0296\13\u0297\1\u0296"+
    "\4\u0297\1\u0296\11\u0297\1\u0296\1\u0297\43\0\1\u0298\3\0"+
    "\1\u0299\7\0\1\u029a\1\u029b\21\0\1\u029c\12\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\4\170\1\u029d\3\170"+
    "\1\u029e\2\170\1\0\4\170\1\u029f\1\u02a0\5\170\1\0"+
    "\4\170\1\0\6\170\1\u02a1\2\170\1\0\1\170\60\0"+
    "\1\u02a2\77\0\1\u02a3\115\0\1\u02a4\105\0\1\u02a5\107\0"+
    "\1\u02a6\34\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\13\170\1\0\5\170\1\u02a7\5\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\12\170\1\u02a8\1\0\13\170\1\0\4\170"+
    "\1\0\11\170\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\13\170\1\0\5\170\1\u02a9\5\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\4\170"+
    "\1\u02aa\6\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\5\170\1\u02ab\5\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\45\0\1\u02ac\136\0\1\u02ad\107\0\1\u02ae"+
    "\67\0\1\u02af\125\0\1\u02b0\16\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\6\170\1\u02b1\4\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\13\170"+
    "\1\0\4\170\1\0\1\170\1\u02b2\7\170\1\0\1\170"+
    "\6\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\13\170\1\0\4\170\1\0\2\170\1\u02b3\6\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\13\170\1\0\4\170\1\u02b4\6\170\1\0\4\170"+
    "\1\0\11\170\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\13\170\1\0\13\170\1\0\4\170"+
    "\1\0\2\170\1\u02b5\6\170\1\0\1\170\47\0\1\u02b6"+
    "\74\0\1\u02b7\106\0\1\u02b8\116\0\1\u02b9\105\0\1\u02ba"+
    "\50\0\4\170\7\0\1\170\6\0\6\170\1\0\10\170"+
    "\1\u02bb\2\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\5\170"+
    "\1\u02bc\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\5\170\1\u02bd\1\0\13\170\1\0\13\170\1\0\4\170"+
    "\1\0\11\170\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\6\170\1\u02be\4\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\5\170\1\u02bf\5\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\60\0\1\u02c0\131\0\1\u02c1\52\0\1\u02c2\106\0\1\u02c3"+
    "\45\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\5\170\1\u02c4\5\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\7\170"+
    "\1\u02c5\1\170\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\10\170\1\u02c6\2\170\1\0\13\170"+
    "\1\0\4\170\1\0\11\170\1\0\1\170\6\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\10\170\1\u02c7\2\170"+
    "\1\0\13\170\1\0\4\170\1\0\11\170\1\0\1\170"+
    "\104\0\1\u02c8\63\0\1\u02b0\131\0\1\u02ba\106\0\1\u02c9"+
    "\10\0\4\170\7\0\1\170\6\0\6\170\1\0\13\170"+
    "\1\0\13\170\1\0\4\170\1\0\10\170\1\u02ca\1\0"+
    "\1\170\6\0\4\170\7\0\1\170\6\0\6\170\1\0"+
    "\13\170\1\0\6\170\1\u02b5\4\170\1\0\4\170\1\0"+
    "\11\170\1\0\1\170\6\0\4\170\7\0\1\170\6\0"+
    "\6\170\1\0\13\170\1\0\13\170\1\0\4\170\1\0"+
    "\10\170\1\u02bf\1\0\1\170\6\0\4\170\7\0\1\170"+
    "\6\0\6\170\1\0\13\170\1\0\13\170\1\0\4\170"+
    "\1\0\10\170\1\u02cb\1\0\1\170\35\0\1\u02b0\154\0"+
    "\1\u02cc\11\0\4\170\7\0\1\170\6\0\5\170\1\u02b5"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\11\170"+
    "\1\0\1\170\6\0\4\170\7\0\1\170\6\0\6\170"+
    "\1\0\13\170\1\0\13\170\1\0\4\170\1\0\7\170"+
    "\1\u02cd\1\170\1\0\1\170\57\0\1\u02b0\35\0\4\170"+
    "\7\0\1\170\6\0\6\170\1\0\13\170\1\0\4\170"+
    "\1\u02b5\6\170\1\0\4\170\1\0\11\170\1\0\1\170";

  /** 
   * The transition table of the DFA
   */
  final private static int yytrans [] = yy_unpack(yy_packed);


  /* error codes */
  final private static int YY_UNKNOWN_ERROR = 0;
  // final private static int YY_ILLEGAL_STATE = 1;
  final private static int YY_NO_MATCH = 2;
  final private static int YY_PUSHBACK_2BIG = 3;

  /* error messages for the codes above */
  final private static String YY_ERROR_MSG[] = {
    "Unkown internal scanner error",		//$NON-NLS-1$
    "Internal error: unknown state",		//$NON-NLS-1$
    "Error: could not match input",		//$NON-NLS-1$
    "Error: pushback value was too large"	//$NON-NLS-1$
  };

  /**
   * YY_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
   */
  private final static byte YY_ATTRIBUTE[] = {
     1,  0,  0,  0,  0,  1,  0,  0,  1,  1,  1,  0,  1,  1,  1,  1, 
     0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  1,  0,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0, 
     0,  0,  1,  0,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  1,  1, 
     9,  1,  9,  1,  1,  9,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     9,  1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  9,  1,  1,  9, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1,  1, 
     1,  1,  1,  1,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  9,  1,  1,  1, 
     1,  1,  1,  9,  9,  1,  9,  1,  1,  1,  1,  1,  1,  1,  1,  1, 
     1,  1,  1,  9,  1,  1,  1,  1,  9,  1,  1,  1,  1,  9,  9,  1, 
     9,  3,  3,  9,  3,  3,  3,  9,  3,  1,  1,  9,  1,  9,  1,  1, 
     1,  1,  1,  9,  9,  1,  9,  3,  3,  9,  3,  3,  3,  9,  3,  1, 
     1,  1,  9,  1,  1,  1,  9,  9,  1,  1,  0,  1,  0,  1,  2,  0, 
     1,  2,  1,  0,  0,  0,  9,  1,  1,  1,  9,  9,  0,  0,  9,  0, 
     0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  1,  1,  0,  0,  1,  1, 
     9,  0,  9,  0,  0,  9,  0,  0,  0,  0,  0,  9,  1,  1,  0,  1, 
     0,  9,  0,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  9,  0,  0, 
     0,  0,  9,  0,  0,  0,  0,  1,  0,  0,  0,  1,  0,  0,  9,  0, 
     0,  1,  0,  0,  9,  0,  0,  0,  0,  1,  0,  0,  1,  1,  0,  0, 
     9,  0,  0,  0,  0,  1,  0,  0,  1,  1,  0,  0,  0,  9,  0,  0, 
     0,  0,  0,  1,  1,  9,  1,  9,  9,  9,  9,  1,  1,  1,  1,  2, 
    13,  3,  2,  2, 13,  3,  2,  0,  1,  1,  0,  1,  1,  1,  1,  2, 
    13,  3,  2,  2, 13,  3,  2,  0,  1,  1,  0,  1,  1,  0,  9,  9, 
     9,  0,  0,  1,  1,  1,  9,  0,  0,  1, 13,  9,  9, 13,  1,  9, 
     9,  1,  1,  1,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  1,  0, 
     0,  3,  2,  2,  3,  2,  2,  0,  0,  0,  0,  0,  0,  0,  1,  0, 
     0,  0,  0,  1,  0,  0,  1,  1,  1,  1,  1,  0,  0,  1,  0,  0, 
     1,  1,  1,  1,  1,  0,  1,  0,  1,  0,  3,  2,  3,  2,  1,  1, 
     1,  1,  1,  0,  2,  3,  3,  3,  2,  2,  3,  3,  3,  2,  1,  1, 
     1,  1,  0,  0,  1,  1,  1,  1,  0,  0,  1,  1,  1,  1,  2,  3, 
     3,  3,  2,  2,  3,  3,  3,  2,  1,  1,  1,  1,  0,  0,  1,  1, 
     1,  1,  0,  0,  9,  9,  0,  1,  9,  0,  1,  1,  0,  0,  1,  5, 
    13, 13,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  1,  1,  9,  5, 
     1,  3,  2,  3,  2,  1,  0,  9,  1,  0,  1,  3,  2,  3,  2,  1, 
     0,  9,  1,  0,  0,  1,  1,  1,  1,  0,  0,  0,  0,  0,  1,  1, 
     2,  2,  0,  0,  2,  2,  0,  0,  0,  1,  1,  1,  1,  0,  0,  0, 
     9,  9,  1,  1,  2,  2,  1,  1,  2,  2,  1,  1,  0,  1,  1,  1, 
     9,  9,  9,  1,  1,  2,  2,  2,  2,  0,  1,  1,  1,  1,  1,  2, 
     2,  2,  2,  9,  1,  1,  1,  1,  3,  3,  3,  3,  1,  1,  1,  1, 
     1,  1,  1,  1,  1,  0,  1,  0,  0,  0,  0,  0,  1,  1,  1,  1, 
     1,  0,  0,  0,  0,  0,  1,  1,  1,  1,  1,  0,  0,  1,  0,  0, 
     1,  1,  1,  1,  1,  0,  0,  0,  0,  9,  1,  1,  1,  1,  1,  0, 
     0,  0,  0,  1,  1,  1,  1,  0,  0,  1,  1,  0,  1
  };

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

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

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

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

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

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

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

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

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

  /** 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; 

  /** 
   * yy_atBOL == true <=> the scanner is currently at the beginning of a line
   */
  // private boolean yy_atBOL;

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

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

  /* user code: */
	private int fTokenCount = 0;
 
	// required holders for white-space compacting
	private boolean fShouldLoadBuffered = false;
	private String fBufferedContext = null;
	private int fBufferedStart = 1;
	private int fBufferedLength = 0;
	private ITextRegion fBufferedEmbeddedContainer = null;
	private ITextRegion fProxyUnknownRegion = null;
	private String f_context = null;

	// state stack for handling embedded regions
	private IntStack fStateStack = new IntStack();
	// a "hint" as to what an embedded region should be evaluated
	private String fEmbeddedHint = UNDEFINED;
	// a "hint" as to what state to enter once an embedded region has
	//   been completed
	private int fEmbeddedPostState = YYINITIAL;
	
	// the container used to create embedded regions
	private ContextRegionContainer fEmbeddedContainer = null;
	private static final String PROXY_CONTEXT = "PROXY_CONTEXT";
	private static final String PROXY_UNKNOWN_CONTEXT = "PROXY_UNKNOWN_CONTEXT";

	private String context = null;
	private int start = 0;
	private int textLength = 0;
	private int length = 0;

	// offset for tracking position specific block tags
	private int fOffset = 0;
	
	// the name of the current tag being opened
	private String fCurrentTagName = null;

	// the name of the current tag inside of an embedded region
	private String internalTagName = null;
	private String internalContext = null;

	// the list of tag name BlockMarkers
	private List fBlockMarkers = new ArrayList(0);
	private List fNestablePrefixes = new ArrayList(1);
	
	// where the last internal container block was found
	private int fLastInternalBlockStart = -1;

	// required to not seek text blocks on an end tag
	private boolean fIsBlockingEnabled = false;
	private boolean fIsCaseSensitiveBlocking = true;

	private static final boolean fForbidJSP = false;
	
	private int fELlevel = 0;

	private JSPParserRegionFactory fRegionFactory = new JSPParserRegionFactory();

	// Is the embedded tag a JSP tag
	private boolean fEmbeddedTag = false;
	// Is the non-embedded tag a JSP tag
	private boolean fContainerTag = false;
	// Is the tokenizer in a non-embedded tag (between < and >)
	private boolean fInTagContainer = false;
	// Is the tokenizer in an embedded tag (between < and >)
	private boolean fInTagEmbedded = false;

	/**
	 * user method 
	 */
	public final void addBlockMarker(BlockMarker marker) {
		if(containsTagName(marker.getTagName()))
			return;
		fBlockMarkers.add(marker);
	}
	/**
	 * user method
	 */
	public final void addNestablePrefix(TagMarker marker) {
		fNestablePrefixes.add(marker);
	}
	/* user method */
	public List getNestablePrefixes() {
		return fNestablePrefixes;
	}
	/**
	 * user method
	 */
	private boolean isNestable(String tagName) {
		//Iterator blocks = fNestablePrefixes.iterator();
		//while(blocks.hasNext()) {
		//	TagMarker marker = (TagMarker)blocks.next();
		//	String markerName = marker.getTagName();
		//	if(tagName.length() > markerName.length() + 1 && tagName.startsWith(markerName) && tagName.charAt(markerName.length()) == ':') {
		//		return marker.isGlobal() || getOffset() >= marker.getMarker().getStart();
		//	}
		//}
		//return false;
		return true;
	}
	/**
	 * user method 
	 */
	public final void removeNestablePrefix(String name) {
		if (fNestablePrefixes != null) {
			Iterator nestables = fNestablePrefixes.iterator();
			while (nestables.hasNext()) {
				if (((TagMarker) nestables.next()).getTagName().equalsIgnoreCase(name))
					nestables.remove();
			}
		}
	}
	/**
	 * user method 
	 */
	public final void removeBlockMarker(BlockMarker marker) {
		fBlockMarkers.remove(marker);
	}
	/**
	 * user method 
	 */
	public final void removeBlockMarker(String tagname) {
		if (fBlockMarkers != null) {
			Iterator blocks = fBlockMarkers.iterator();
			while (blocks.hasNext()) {
				if (((BlockMarker) blocks.next()).getTagName().equals(tagname))
					blocks.remove();
			}
		}
	}
	/* user method */
	private final void assembleEmbeddedTagSequence(String startType, String endTagName) {
		assembleEmbeddedContainer(startType, null, endTagName);
	}
	/* user method */
	private final void assembleEmbeddedContainer(String startType, String[] endTypes) {
		assembleEmbeddedContainer(startType, endTypes, null);
	}
	/* user method */
	private final void assembleEmbeddedContainer(String startType, String endType) {
		assembleEmbeddedContainer(startType, new String[]{endType}, null);
	}
	/**
	 *  user method 
	 * 
	 * Assembles an embedded container beginning with the given startType as
	 * the first ContextRegion within it and of the type fEmbeddedHint.  The
	 * endTypes[] array contains the context types that will cause a successful
	 * exit.  Use of the endTagName parameter alters this behavior to force an
	 * exit on an XML_TAG_CLOSE after seeing an XML_TAG_NAME whose significant
	 * text matches the endTagName String.  All contents in between are
	 * insignificant, and yes, this means comments are allowed inside.
	 **/
	private final void assembleEmbeddedContainer(String startType, String[] endTypes, String endTagName) {
		// the context of the region being added to the embedded container
		internalContext = startType;
		// keep track of where this container began; to provide relative indeces for the regions
		int containerStart = yychar;
		boolean notFinished = true;
		// keep track of where we seem to be so that the endTagName can be checked
		boolean isInEndTag = false;
		boolean isInFirstTag = true;
		// create the embedded container and setup its "type"
		if (fEmbeddedContainer == null) {
			fEmbeddedContainer = new ContextRegionContainer();
			fEmbeddedContainer.setType(fEmbeddedHint);
			fEmbeddedContainer.setStart(containerStart);
			// TODO: parent region needs to be set .... but not sure where to get it from 
			//		fEmbeddedContainer.setParent(parentRegion);
		}
		containerStart = fEmbeddedContainer.getStart();
		while (notFinished) {
			// add the region to the container
			if (internalContext != null && internalContext != PROXY_CONTEXT) {
				ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
				fEmbeddedContainer.getRegions().add(newToken);
				fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
				fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
				// DW, 4/16/2003 token regions no longer have parents
				//newToken.setParent(fEmbeddedContainer);
			}
			try {
				// longscan determines whether to attempt a blockTagScan within the embedded container
				boolean longscan = false;
				// save the tokenizer state in case of a block tag scan
				int previousState = yystate();
				String previousCurrentTagName = fCurrentTagName;
				int previousPostState = fEmbeddedPostState;
				String previousEmbeddedHint = fEmbeddedHint;
				// determine if a block tag scan is necessary
				if (internalContext == XML_TAG_NAME) {
					internalTagName = yytext();
					if(!isNestable(internalTagName)) {
						internalTagName = null;
						// snagged a tag name we shouldn't have
						fEmbeddedPostState = ST_ABORT_EMBEDDED;
						notFinished = false;
					}
				}
				else if (internalContext == XML_TAG_OPEN || internalContext == XML_END_TAG_OPEN) {
					internalTagName = null;
				}
				// do upkeep for endTagName usage; must be here since the next token could be the close
				if (internalContext == XML_END_TAG_OPEN) {
					isInEndTag = true;
				} else if (internalContext == XML_TAG_CLOSE) {
					isInFirstTag = isInEndTag = false;
				} else {
				 	ITextRegionList embeddedRegions = fEmbeddedContainer.getRegions();
					if (embeddedRegions.size() > 2 && (embeddedRegions.get(embeddedRegions.size()-1)).getType() == XML_TAG_CLOSE && (embeddedRegions.get(embeddedRegions.size() - 3)).getType() == XML_TAG_OPEN && internalTagName != null) {
						if (containsTagName(internalTagName)) {
							longscan = true;
							yybegin(ST_BLOCK_TAG_SCAN);
						}
					}
				}
				if (longscan)
					fCurrentTagName = internalTagName;
				// read the next region and context
				internalContext = primGetNextToken();
				if (longscan) {
					// Returning from a block tag scan requires restoring some state variables
					// as well as handling the block region and setting up for normal scanning
					// inside the embedded container
					ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
					fEmbeddedContainer.getRegions().add(newToken);
					fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
					fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
					// DW, 4/16/2003 token regions no longer have parents
					// newToken.setParent(fEmbeddedContainer);
					longscan = false;
					fEmbeddedPostState = previousPostState;
					fEmbeddedHint = previousEmbeddedHint;
					fCurrentTagName = previousCurrentTagName;
					yybegin(previousState);
					internalContext = primGetNextToken();
				}
			} catch (IOException e) {
				// primGetNextToken() calls may throw an IOException
				// catch and do nothing since the isEOF check below
				// will properly exit if the input was too short
			} catch (Exception f) {
				// some other exception happened; never should
				Logger.logException(f);
			}
			boolean isEndingType = yystate() == ST_ABORT_EMBEDDED;
			if(!isEndingType) {
				// check for ending context
				if (endTagName == null) {
					for (int i = 0; i < endTypes.length; i++) {
						isEndingType = isEndingType || (internalContext == endTypes[i]);
					}
				}
				else {
					isEndingType = ((isInEndTag && internalContext == XML_TAG_CLOSE) || (isInFirstTag && internalContext == XML_EMPTY_TAG_CLOSE)) && internalTagName != null && internalTagName.equals(endTagName);
				}
			}
			ITextRegionList embeddedList = fEmbeddedContainer.getRegions();
			notFinished = notFinished && ((!isEndingType) && !isEOF() && (endTagName != null || internalContext != UNDEFINED) && !(internalContext == PROXY_CONTEXT && (embeddedList.get(embeddedList.size()-1)).getType() == UNDEFINED));
		}
		// finish adding the last context
		if (internalContext != null && internalContext != PROXY_CONTEXT) {
			ITextRegion newToken = fRegionFactory.createToken(internalContext, yychar - containerStart, yylength(), yylength());
			fEmbeddedContainer.getRegions().add(newToken);
			// DW, 4/16/2003 token regions no longer have parents
			//newToken.setParent(fEmbeddedContainer);
			fEmbeddedContainer.setLength(yychar - containerStart + yylength());
			fEmbeddedContainer.setTextLength(yychar - containerStart + yylength());
		}
		yybegin(fEmbeddedPostState);
	}
	/* user method */
	public final boolean isCaseSensitiveBlocking() {
		return fIsCaseSensitiveBlocking;
	}
	/* user method */
	public final void setCaseSensitiveBlocking(boolean newValue) {
		fIsCaseSensitiveBlocking = newValue;
	}
	/* user method */
	public boolean getBlockMarkerAllowsJSP() {
		return getBlockMarkerAllowsJSP(fCurrentTagName);
	}
	/* user method */
	public boolean getBlockMarkerAllowsJSP(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			boolean casesensitive = marker.isCaseSensitive();
			if(casesensitive && marker.getTagName().equals(name))
				return marker.allowsJSP();
			else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
				return marker.allowsJSP();
		}
		return true;
	}
	/* user method */
	public boolean getBlockMarkerCaseSensitivity() {
		return getBlockMarkerCaseSensitivity(fCurrentTagName);
	}
	public boolean getBlockMarkerCaseSensitivity(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			boolean casesensitive = marker.isCaseSensitive();
			if(casesensitive && marker.getTagName().equals(name))
				return casesensitive;
			else if(!casesensitive && marker.getTagName().equalsIgnoreCase(name))
				return casesensitive;
		}
		return true;
	}
	/* user method */
	public String getBlockMarkerContext() {
		return getBlockMarkerContext(fCurrentTagName);
	}
	/* user method */
	public String getBlockMarkerContext(String name) {
		Iterator iterator = fBlockMarkers.iterator();
		while(iterator.hasNext()) {
			BlockMarker marker = (BlockMarker)iterator.next();
			if(marker.getTagName().equals(name))
				return marker.getContext();
		}
		return BLOCK_TEXT;
	}
	/* user method */
	public List getBlockMarkers() {
		return fBlockMarkers;
	}
	/* user method */
	public final int getOffset() {
		return fOffset + yychar;
	}
	private final boolean isBlockMarker() {
		return isBlockMarker(fCurrentTagName);
	}
	private final boolean isBlockMarker(String tagName) {
		if (!fIsBlockingEnabled)
			return false;
		return containsTagName(tagName);
	}
	/**
	 * user method
	 */
	public final void beginBlockTagScan(String newTagName) {
		beginBlockMarkerScan(newTagName, BLOCK_TEXT);
	}
	/**
	 * user method
	 *
	 * Special tokenizer setup.  Allows tokenization to be initiated at the
	 * start of a text block within a "newTagName" tag.
	 *
	 * Example: 
	 *	Tokenizer toker = new Tokenizer();
	 *	toker.setCaseSensitiveBlocking(false);
	 *	toker.reset(new java.io.StringReader("afiuhqwkejhtasihgalkwhtq</scripter></scr></script>asgdasga"));
	 *	toker.beginBlockMarkerScan("script", BLOCK_TEXT);
	 *	toker.getRegions(); 
	 *
	 * Returns:
	 *	BLOCK_TEXT: 0-40
	 *	XML_END_TAG_OPEN: 41-42
	 *	XML_TAG_NAME: 43-48
	 *	XML_TAG_CLOSE: 49-49
	 *	XML_CONTENT: 50-57
	 *
	 */
	public final void beginBlockMarkerScan(String newTagName, String blockcontext) {
		yybegin(ST_BLOCK_TAG_SCAN);
		fCurrentTagName = newTagName;
	}

/**
 * Method doScan.
 * 
 * Returns a context region for all of the text from the current position upto the end of input or
 * to right *before* the first occurence of searchString
 * 
 * @param searchString - target string to search for ex.: "-->", "</tagname"
 * @param requireTailSeparator - whether the target must be immediately followed by whitespace or '>'
 * @param allowJSP - check for and allow for JSP markup <%%>
 * @param context - the context of the scanned region if non-zero length
 * @param exitState - the state to go to if the region was of non-zero length
 * @param abortState - the state to go to if the searchString was found immediately
 * @return String - the context found: the desired context on a non-zero length match, the abortContext on immediate success
 * @throws IOException
 */
private final String doScan(String searchString, boolean requireTailSeparator, boolean allowJSP, boolean allowCDATA, String searchContext, int exitState, int immediateFallbackState) throws IOException {
	boolean stillSearching = true;
	boolean wasBlockingEnabled = fIsBlockingEnabled;
	try {
		// Disable further block (probably)
		fIsBlockingEnabled = false;
		int searchStringLength = searchString.length();
		int n = 0;
		char lastCheckChar;
		int i;
		boolean same = false;
		// Check for JSP starts ("<%") if the tag is global like SCRIPT or STYLE
		boolean checkJSPs = allowJSP && !fForbidJSP;
		boolean checkedForJSPsOnce = !checkJSPs;
		boolean checkedJSPsAtStartOnce = false;
		
		while (stillSearching) {
			n = 0;
			// Ensure that enough data from the input exists to compare against the search String.
			n = yy_advance();
			while(n != YYEOF && yy_currentPos < searchStringLength)
				n = yy_advance();
	//		c = (char) n;
			// If the input was too short or we've exhausted the input, stop immediately.
			if (n == YYEOF && checkedForJSPsOnce) {
				stillSearching = false;
			}
			else {
				/**
				 * Look for starting JSPs "<%"
				 */
				checkedForJSPsOnce = true;
				// 1) yy_currentPos - searchStringLength : There's at least searchStringLength of input available; once that's read, check for JSPs
				// ---
				// Look for a JSP beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
				// Ensure that we've not encountered a complete block (<%%>) that was *shorter* than the closeTagString and
				// thus found twice at current-targetLength [since the first scan would have come out this far anyway].
				if(checkJSPs && yy_currentPos > searchStringLength && yy_currentPos - searchStringLength != fLastInternalBlockStart && 
					yy_buffer[yy_currentPos - searchStringLength] == '<' && yy_buffer[yy_currentPos - searchStringLength + 1] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 2) yy_currentPos - jspstarter.length : There's not searchStringLength of input available; check for a JSP 2 spots back in what we could read
				// ---
				// Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
				// since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
				// spill over the end of the buffer while checking.
				else if(checkJSPs && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
						yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 3) yy_currentPos..(yy_currentPos+jspStartlength-1) : Check at the start of the block one time
				// ---
				// Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
				// since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
				else if(checkJSPs && !checkedJSPsAtStartOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
						yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
					checkedJSPsAtStartOnce = true;
					fLastInternalBlockStart = yy_markedPos = yy_startRead;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
	
	
				/**
				 * Look for starting CDATA "<![CDATA["
				 */
				// 1) yy_currentPos - searchStringLength: There's at least searchStringLength of input available; once that's read, check for CDATA
				// ---
				// Look for a CDATA beginning at current-searchStringLength; if so, backup and switch scanner states to handle it.
				// Ensure that we've not encountered a complete block (<[!CDATA[]]>) that was *shorter* than the closeTagString and
				// thus found twice at current-targetLength [since the first scan would have come out this far anyway].
	/*			if(checkCDATA && yy_currentPos > searchStringLength && yy_currentPos + searchStringLength < yy_buffer.length && yy_currentPos - searchStringLength != fLastInternalBlockStart && 
					charsMatch(cdataStarter, yy_buffer, 0, yy_currentPos - searchStringLength)) {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - searchStringLength;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					// go to a state where CDATA can be found
					if (fEmbeddedContainer == null) {
						fEmbeddedContainer = new ContextRegionContainer();
						fEmbeddedContainer.setType(searchContext);
						fEmbeddedContainer.setStart(yychar);
					}
					ITextRegion newToken = fRegionFactory.createToken(searchContext, yychar, yylength(), yylength());
					fEmbeddedContainer.getRegions().add(newToken);
					fEmbeddedContainer.setLength(fEmbeddedContainer.getLength() + yylength());
					fEmbeddedContainer.setTextLength(fEmbeddedContainer.getTextLength() + yylength());
					yybegin(YYINITIAL);
					String context = primGetNextToken();
					if(context.equals(XMLRegionContexts.XML_CDATA_OPEN)) {
						assembleEmbeddedContainer(XMLRegionContexts.XML_CDATA_OPEN, XMLRegionContexts.XML_CDATA_CLOSE);
					}
					yybegin(resumeState);
					return searchContext;
				}
	*//*
				// 2) yy_currentPos - cdataStarter.length: There's not searchStringLength of input available; check for a CDATA right here spots back in what we could read
				// ---
				// Look for a JSP beginning at the current position; this case wouldn't be handled by the preceding section
				// since it relies upon *having* closeTagStringLength amount of input to work as designed.  Must be sure we don't
				// spill over the end of the buffer while checking.
				else if(checkCDATA && yy_startRead != fLastInternalBlockStart && yy_currentPos > 0 && yy_currentPos < yy_buffer.length - 1 &&
						yy_buffer[yy_currentPos - 1] == '<' && yy_buffer[yy_currentPos] == '%') {
					fLastInternalBlockStart = yy_markedPos = yy_currentPos - 1;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
				// 3) yy_currentPos : Check at the start of the block one time
				// ---
				// Look for a JSP beginning immediately in the block area; this case wouldn't be handled by the preceding section
				// since it relies upon yy_currentPos equaling exactly the previous end +1 to work as designed.
				else if(checkCDATA && !checkedForCDATAOnce && yy_startRead != fLastInternalBlockStart && yy_startRead > 0 &&
						yy_startRead < yy_buffer.length - 1 && yy_buffer[yy_startRead] == '<' && yy_buffer[yy_startRead + 1] == '%') {
					checkedForCDATAOnce = true;
					fLastInternalBlockStart = yy_markedPos = yy_startRead;
					yy_currentPos = yy_markedPos + 1;
					int resumeState = yystate();
					yybegin(ST_BLOCK_TAG_INTERNAL_SCAN);
					if(yy_markedPos == yy_startRead) {
						String jspContext = primGetNextToken();
						yybegin(resumeState);
						return jspContext;
					}
					return searchContext;
				}
	*/
				// Check the characters in the target versus the last targetLength characters read from the buffer
				// and see if it matches
				if (n == YYEOF) {
					stillSearching = false;
				}
				else {
					same = true;
					// safety check for array accesses
					if(yy_currentPos >= searchStringLength && yy_currentPos <= yy_buffer.length) {
						for(i = 0; i < searchStringLength && same; i++) {
							if(fIsCaseSensitiveBlocking)
								same = yy_buffer[i + yy_currentPos - searchStringLength] == searchString.charAt(i);
							else
								same = Character.toLowerCase(yy_buffer[i + yy_currentPos - searchStringLength]) == Character.toLowerCase(searchString.charAt(i));
						}
					}
					// safety check failed; no match is possible right now
					else {
						same = false;
					}
				}
				if (same && requireTailSeparator && yy_currentPos < yy_buffer.length) {
					// Additional check for close tags to ensure that targetString="</script" doesn't match
					// "</scriptS"
					lastCheckChar = yy_buffer[yy_currentPos];
					// Succeed on "</script>" and "</script "
					if(lastCheckChar == '>' || Character.isWhitespace(lastCheckChar))
						stillSearching = false;
				}
				else {
					stillSearching = !same || (yy_currentPos < yy_startRead + searchStringLength);
				}
			}
		}
		if (n != YYEOF || same) {
			// We've stopped short of the end or definitely found a match
			yy_markedPos = yy_currentPos - searchStringLength;
			yy_currentPos = yy_markedPos + 1;
			// If the searchString occurs at the very beginning of what would have
			// been a Block, resume scanning normally immediately
			if (yy_markedPos == yy_startRead) {
				yybegin(immediateFallbackState);
				return primGetNextToken();
			}
		}
		else {
			// We ran through the rest of the input
			yy_markedPos = yy_currentPos;
			yy_currentPos++;
		}
		yybegin(exitState);
		// If the ending occurs at the very beginning of what would have
		// been a Block, resume scanning normally immediately
		if(yy_markedPos == yy_startRead)
			return primGetNextToken();
		return searchContext;
	}
	finally {
		fIsBlockingEnabled = wasBlockingEnabled;
	}
}
/**
 * user method 
 * does a lookahead for the current tag name
 */
private final String doBlockTagScan() throws IOException {
	fIsCaseSensitiveBlocking = getBlockMarkerCaseSensitivity();
	return doScan("</" + fCurrentTagName, true, getBlockMarkerAllowsJSP(), true, getBlockMarkerContext(fCurrentTagName), YYINITIAL, YYINITIAL);
}
	/**
	 * user method
	 *
	 * Converts the raw context String returned by the primGetNextToken()
	 * method into a full ITextRegion by pulling in values for the
	 * current offset within the scanning text.
	 *
	 * Returns null when EOF is encountered and attaches intermittently
	 * discovered whitespace onto the end of useful regions.
	 *
	 * Note that this algorithm caches the token following the one being returned
	 * so that whitespace can be collapsed.
	 */
	public final ITextRegion getNextToken() throws IOException {
		fEmbeddedContainer = null;
		// load the starting non-whitespace token (assume that it is so)
		if (fShouldLoadBuffered) {
			if (fBufferedEmbeddedContainer != null) {
				ITextRegion container = fBufferedEmbeddedContainer;
				fBufferedEmbeddedContainer = null;
				fShouldLoadBuffered = false;
				return container;
			}
			context = fBufferedContext;
			start = fBufferedStart;
			textLength = length = fBufferedLength;
			fShouldLoadBuffered = false;
		} else {
			context = primGetNextToken();
			if (context == PROXY_CONTEXT) {
				return fEmbeddedContainer;
			} else if (context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
				if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
					fCurrentTagName = yytext();
				else
					fCurrentTagName = null;
			} else if (context == XML_TAG_OPEN) {
				fIsBlockingEnabled = true;
			} else if (context == XML_END_TAG_OPEN) {
				fIsBlockingEnabled = false;
			}
			start = yychar;
			textLength = length = yylength();
			if (yy_atEOF) {
				fTokenCount++;
				return null;
			}
		}
		// store the next token
		f_context = primGetNextToken();
		if (f_context == PROXY_CONTEXT) {
			fBufferedEmbeddedContainer = fEmbeddedContainer;
			fShouldLoadBuffered = true;
		} else if (f_context == XML_TAG_NAME || f_context == JSP_ROOT_TAG_NAME || f_context == JSP_DIRECTIVE_NAME) {
			if(containsTagName(yy_buffer, yy_startRead, yy_markedPos-yy_startRead))
				fCurrentTagName = yytext();
			else
				fCurrentTagName = null;
		} else if (f_context == XML_TAG_OPEN) {
			fIsBlockingEnabled = true;
		} else if (f_context == XML_END_TAG_OPEN) {
			fIsBlockingEnabled = false;
		} else if (f_context == PROXY_UNKNOWN_CONTEXT) {
			fBufferedEmbeddedContainer = fProxyUnknownRegion;
		}
		fBufferedContext = f_context;
		fBufferedStart = yychar;
		fBufferedLength = yylength();
		fShouldLoadBuffered = true;
		if (fBufferedContext == WHITE_SPACE) {
			fShouldLoadBuffered = false;
			length += fBufferedLength;
		}
		if (context == null) {
			// EOF
			if (Debug.debugTokenizer) {
				System.out.println(getClass().getName() + " discovered " + fTokenCount + " tokens."); //$NON-NLS-2$//$NON-NLS-1$
			}
			return null;
		}
		fTokenCount++;
		return fRegionFactory.createToken(context, start, textLength, length, null, fCurrentTagName);
	}
	/* user method */
	public JSPTokenizer(){
		super();
	}
	/* user method */
	public JSPTokenizer(char[] charArray){
			this(new CharArrayReader(charArray));
	}
	/* user method */
	public void reset(char[] charArray) {
		reset(new CharArrayReader(charArray), 0);
	}
	/* user method */
	public void reset(char[] charArray, int newOffset) {
		reset(new CharArrayReader(charArray), newOffset);
	}
	/* user method */
	public void reset(java.io.InputStream in) {
		reset(new java.io.InputStreamReader(in), 0);
	}
	/* user method */
	public void reset(java.io.InputStream in, int newOffset) {
		reset(new java.io.InputStreamReader(in), newOffset);
	}
	/* user method */
	public void reset(java.io.Reader in) {
		reset(in, 0);
	}
	/**
	 * user method *
	 *
	 * Reset internal counters and vars to "newly created" values, in the hopes
	 * that resetting a pre-existing tokenizer is faster than creating a new one.
	 *
	 * This method contains code blocks that were essentially duplicated from the
	 * <em>generated</em> output of this specification before this method was
	 * added.  Those code blocks were under the above copyright.
	 */
	public void reset(java.io.Reader in, int newOffset) {
		if (Debug.debugTokenizer) {
			System.out.println("resetting tokenizer");//$NON-NLS-1$
		}
		fOffset = newOffset;
	
		/* the input device */
		yy_reader = in;
	
		/* the current state of the DFA */
		yy_state = 0;
	
		/* the current lexical state */
		yy_lexical_state = YYINITIAL;
	
		/* this buffer contains the current text to be matched and is
		the source of the yytext() string */
		java.util.Arrays.fill(yy_buffer, (char)0);
	
		/* the textposition at the last accepting state */
		yy_markedPos = 0;
	
		/* the textposition at the last state to be included in yytext */
		yy_pushbackPos = 0;
	
		/* the current text position in the buffer */
		yy_currentPos = 0;
	
		/* startRead marks the beginning of the yytext() string in the buffer */
		yy_startRead = 0;
	
		/** 
		 * endRead marks the last character in the buffer, that has been read
		 * from input 
		 */
		yy_endRead = 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;
	
		/* yy_atEOF == true <=> the scanner has returned a value for EOF */
		yy_atEOF = false;
	
		/* denotes if the user-EOF-code has already been executed */
		yy_eof_done = false;
	
	
		/* user vars: */
		fTokenCount = 0;
	 
		fShouldLoadBuffered = false;
		fBufferedContext = null;
		fBufferedStart = 1;
		fBufferedLength = 0;
		fStateStack = new IntStack();
	
		fLastInternalBlockStart = -1;
	
		context = null;
		start = 0;
		textLength = 0;
		length = 0;
	
		fEmbeddedContainer = null;
		
		fELlevel = 0;
	}
	/**
	 * user method
	 *
	 */
	public BlockTokenizer newInstance() {
		JSPTokenizer newInstance = new JSPTokenizer();
		// global tagmarkers can be shared; they have no state and 
		// are never destroyed (e.g. 'release')
		for(int i = 0; i < fBlockMarkers.size(); i++) {
			BlockMarker blockMarker = (BlockMarker) fBlockMarkers.get(i);
			if(blockMarker.isGlobal())
				newInstance.addBlockMarker(blockMarker);
		}
		for(int i = 0; i < fNestablePrefixes.size(); i++) {
			TagMarker marker = (TagMarker) fNestablePrefixes.get(i);
			if(marker.isGlobal())
				newInstance.addNestablePrefix(marker);
		}
		return newInstance;
	}
	/* user method */
	private final String scanXMLCommentText() throws IOException {
		// Scan for '-->' and return the text up to that point as
		//   XML_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
		//  case change to the ST_XML_COMMENT_END state and return the next
		//  context as usual.
		return doScan("-->", false, true, true, XML_COMMENT_TEXT, ST_XML_COMMENT_END, ST_XML_COMMENT_END);
	}
	/* user method */
	private final String scanJSPCommentText() throws IOException {
		// Scan for '--%>' and return the text up to that point as
		//   JSP_COMMENT_TEXT unless the string occurs IMMEDIATELY, in which
		//  case change to the ST_JSP_COMMENT_END state and return the next
		//  context as usual.
		return doScan("--%>", false, false, true, JSP_COMMENT_TEXT, ST_JSP_COMMENT_END, ST_JSP_COMMENT_END);
	}
	
	/* user method */
	private boolean isJspTag() {
		return (fContainerTag && fEmbeddedContainer != null) || (fContainerTag && fInTagContainer) || (fEmbeddedTag && fInTagEmbedded);
	}


  /**
   * 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 JSPTokenizer(java.io.Reader in) {
    this.yy_reader = 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 JSPTokenizer(java.io.InputStream in) {
    this(new java.io.InputStreamReader(in));
  }

  /** 
   * Unpacks the compressed DFA transition table.
   *
   * @param packed   the packed transition table
   * @return         the unpacked transition table
   */
  private static int [] yy_unpack(String packed) {
    int [] trans = new int[35287];
    int i = 0;  /* index in packed string  */
    int j = 0;  /* index in unpacked array */
    while (i < 9344) {
      int count = packed.charAt(i++);
      int value = packed.charAt(i++);
      value--;
      do trans[j++] = value; while (--count > 0);
    }
    return trans;
  }

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


  /**
   * Gets the next input character.
   *
   * @return      the next character of the input stream, EOF if the
   *              end of the stream is reached.
   * @exception   IOException  if any I/O-Error occurs
   */
  private int yy_advance() throws java.io.IOException {

    /* standard case */
    if (yy_currentPos < yy_endRead) return yy_buffer[yy_currentPos++];

    /* if the eof is reached, we don't need to work hard */ 
    if (yy_atEOF) return YYEOF;

    /* otherwise: need to refill the buffer */

    /* first: make room (if you can) */
    if (yy_startRead > 0) {
      System.arraycopy(yy_buffer, yy_startRead, 
                       yy_buffer, 0, 
                       yy_endRead-yy_startRead);

      /* translate stored positions */
      yy_endRead-= yy_startRead;
      yy_currentPos-= yy_startRead;
      yy_markedPos-= yy_startRead;
      yy_pushbackPos-= yy_startRead;
      yy_startRead = 0;
    }

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

    /* finally: fill the buffer with new input */
    int numRead = yy_reader.read(yy_buffer, yy_endRead, 
                                            yy_buffer.length-yy_endRead);

    if ( numRead == -1 ) return YYEOF;

    yy_endRead+= numRead;

    return yy_buffer[yy_currentPos++];
  }

    
  /**
   * Closes the input stream.
   */
  final public void yyclose() throws java.io.IOException {
    yy_atEOF = true;            /* indicate end of file */
    yy_endRead = yy_startRead;  /* invalidate buffer    */
    yy_reader.close();
  }


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

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


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

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


  /**
   * Reports an error that occured while scanning - from the SED JFlex skeleton
   *
   * @param   errorCode  the code of the errormessage to display
   */
  private void yy_ScanError(int errorCode) {
    try {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[errorCode]);
    }
    catch (ArrayIndexOutOfBoundsException e) {
      Logger.log(Logger.ERROR, YY_ERROR_MSG[YY_UNKNOWN_ERROR]);
    }
    // DO NOT EXIT the VM on an error
    // System.exit(1);
  } 


  /**
   * 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()!
   */
  void yypushback(int number) {
    if ( number > yylength() )
      yy_ScanError(YY_PUSHBACK_2BIG);

    yy_markedPos -= number;
  }

	/**
	 * user method - skeleton.sed
	 */
	protected final boolean containsTagName(char[] markerTagName, int offset, int tagnameLength) {
		for(int j = 0; j < fBlockMarkers.size(); j++) {
			BlockMarker marker = (BlockMarker)fBlockMarkers.get(j);
			if(marker.getTagName().length() == tagnameLength) {
				boolean matchesSoFar = true;
				for(int i = 0; i < tagnameLength && matchesSoFar; i++) {
					if(marker.isCaseSensitive()) {
						if(marker.getTagName().charAt(i) != markerTagName[i + offset])
							matchesSoFar = false;
					}
					else {
						if(Character.toLowerCase(marker.getTagName().charAt(i)) != Character.toLowerCase(markerTagName[i + offset]))
							matchesSoFar = false;
					}
				}
				if(matchesSoFar)
					return true;
			}
		}
		return false;
	}

	/**
	 * user method - skeleton.sed
	 *
	 * Return ALL of the regions scannable within the remaining text
	 * Note: for verification use
	 */
	public final List getRegions() {
		List tokens = new ArrayList();
		ITextRegion region = null;
		try {
			region = getNextToken();
			while(region != null) {
				if (region != null) {
					tokens.add(region);
				}
				region = getNextToken();
			}
		}
		catch (StackOverflowError e) {
			Logger.logException(getClass().getName()+": input could not be tokenized correctly at position " + getOffset(), e);//$NON-NLS-1$
			throw e;
		}
		catch (Exception e) {
			// Since this is convenience method and NOT the recommended 
			// way of getting tokens, many errors are simply hidden
			Logger.logException("Exception not handled retrieving regions: " + e.getLocalizedMessage(), e);//$NON-NLS-1$
		}
		return tokens;
	}
	/**
	 * user method - skeleton.sed
	 */
	private final void dump(String s) {
		if (Debug.debugTokenizer) {
			System.out.println(s + " (" + yychar + "-" + //$NON-NLS-2$//$NON-NLS-1$
				(yylength() + yychar) + "):\'" +//$NON-NLS-1$
					StringUtils.escape(yytext()) + "\'");//$NON-NLS-1$
		}
	}
	/* user method  - skeleton.sed */
	public final boolean isEOF() {
		return yy_atEOF;
	}
/* user method - skeleton.sed */
protected final boolean containsTagName(String markerTagName) {
	Iterator blocks = fBlockMarkers.iterator();
	while(blocks.hasNext()) {
		BlockMarker marker = (BlockMarker)blocks.next();
		if(marker.isCaseSensitive()) {
			if(marker.getTagName().equals(markerTagName))
				return true;
		}
		else {
			if(marker.getTagName().equalsIgnoreCase(markerTagName))
				return true;
		}
	}
	return false;
}

  /**
   * Contains user EOF-code, which will be executed exactly once,
   * when the end of file is reached
   */
  private void yy_do_eof() {
    if (!yy_eof_done) {
      yy_eof_done = true;
    // do nothing, this is the downstream parser's job

    }
  }


  /**
   * 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   IOException  if any I/O-Error occurs
   */
  public String primGetNextToken() throws java.io.IOException {
    int yy_input;
    int yy_action;

    yy_pushbackPos = -1;
    boolean yy_was_pushback;

    while (true) {

      yychar+= yylength();

      boolean yy_counted = false;
      for (yy_currentPos = yy_startRead; yy_currentPos < yy_markedPos;
                                                      yy_currentPos++) {
        switch (yy_buffer[yy_currentPos]) {
        case '\r':
          yyline++;
          yy_counted = true;
          break;
        case '\n':
          if (yy_counted)
            yy_counted = false;
          else {
            yyline++;
          }
          break;
        default:
          yy_counted = false;
        }
      }

      if (yy_counted) {
        if ( yy_advance() == '\n' ) yyline--;
        if ( !yy_atEOF ) yy_currentPos--;
      }

      yy_action = -1;

      yy_currentPos = yy_startRead = yy_markedPos;

      yy_state = yy_lexical_state;

      yy_was_pushback = false;

      yy_forAction: {
        while (true) {
    
          yy_input = yy_advance();

          if ( yy_input == YYEOF ) break yy_forAction;

          int yy_next = yytrans[ yy_rowMap[yy_state] + yycmap[yy_input] ];
          if (yy_next == -1) break yy_forAction;
          yy_state = yy_next;

          int yy_attributes = YY_ATTRIBUTE[yy_state];
          if ( (yy_attributes & 2) > 0 )
            yy_pushbackPos = yy_currentPos;

          if ( (yy_attributes & 1) > 0 ) {
            yy_was_pushback = (yy_attributes & 4) > 0;
            yy_action = yy_state; 
            yy_markedPos = yy_currentPos; 
            if ( (yy_attributes & 8) > 0 ) break yy_forAction;
          }

        }
      }

      if (yy_was_pushback)
        yy_markedPos = yy_pushbackPos;

      switch (yy_action) {    

        case 124: 
        case 129: 
        case 130: 
        case 289: 
        case 295: 
        case 296: 
        case 433: 
        case 436: 
        case 543: 
          {  /* only allow for non-JSP tags for this does not obey JSP quoting rules */
	if(Debug.debugTokenizer)
		dump("attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 718: break;
        case 169: 
        case 174: 
        case 175: 
        case 349: 
        case 355: 
        case 356: 
        case 470: 
        case 472: 
        case 474: 
        case 476: 
        case 559: 
          {  /* JSP attribute values have escape semantics */
	if(Debug.debugTokenizer)
		dump("jsp attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 719: break;
        case 685: 
        case 690: 
        case 697: 
        case 702: 
          { 
	if(Debug.debugTokenizer)
		dump("jsp directive tag name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_DIRECTIVE_NAME;
 }
        case 720: break;
        case 660: 
          { 
	if(Debug.debugTokenizer)
		dump("XSL processing instruction target");//$NON-NLS-1$
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 721: break;
        case 643: 
        case 646: 
        case 647: 
        case 648: 
        case 649: 
        case 650: 
        case 651: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCDATA start");//$NON-NLS-1$
	fStateStack.push(yystate());
	yybegin(ST_CDATA_TEXT);
	return XML_CDATA_OPEN;
 }
        case 722: break;
        case 635: 
          { 
	if(Debug.debugTokenizer)
		dump("jsp:root tag name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return JSP_ROOT_TAG_NAME;
 }
        case 723: break;
        case 626: 
          { 
	if(Debug.debugTokenizer)
		dump("element");//$NON-NLS-1$
	yybegin(ST_XML_ELEMENT_DECLARATION);
	return XML_ELEMENT_DECLARATION;
 }
        case 724: break;
        case 625: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist");//$NON-NLS-1$
	yybegin(ST_XML_ATTLIST_DECLARATION);
	return XML_ATTLIST_DECLARATION;
 }
        case 725: break;
        case 624: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_DECLARATION);
	return XML_DOCTYPE_DECLARATION;
 }
        case 726: break;
        case 609: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype external id");//$NON-NLS-1$
	fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_PUBREF;
	yybegin(ST_XML_DOCTYPE_ID_PUBLIC);
	return XML_DOCTYPE_EXTERNAL_ID_PUBLIC;
 }
        case 727: break;
        case 608: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype external id");//$NON-NLS-1$
	fEmbeddedHint = XML_DOCTYPE_EXTERNAL_ID_SYSREF;
	yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
	return XML_DOCTYPE_EXTERNAL_ID_SYSTEM;
 }
        case 728: break;
        case 602: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 729: break;
        case 577: 
        case 618: 
        case 619: 
          { 
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 730: break;
        case 567: 
        case 614: 
        case 615: 
          { 
	return JSP_EL_QUOTED_CONTENT;
 }
        case 731: break;
        case 558: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment close");//$NON-NLS-1$
	yybegin(YYINITIAL);
	return JSP_COMMENT_CLOSE;
 }
        case 732: break;
        case 545: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(yylength() > 2)
		yypushback(yylength() -2);
	if(Debug.debugTokenizer)
		dump("VBL in attr value");//$NON-NLS-1$
	yybegin(ST_JSP_VBL);
	fELlevel++;
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE});
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 733: break;
        case 544: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", el-unquoted");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(yylength() > 2)
		yypushback(yylength() -2);
	if(Debug.debugTokenizer)
		dump("EL in attr value");//$NON-NLS-1$
	yybegin(ST_JSP_EL);
	fELlevel++;
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE});
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 734: break;
        case 536: 
          { 
	if(Debug.debugTokenizer)
		dump("\nCharRef");//$NON-NLS-1$
	return XML_CHAR_REFERENCE;
 }
        case 735: break;
        case 533: 
          { 
	if(Debug.debugTokenizer)
		dump("\ncomment start");//$NON-NLS-1$
	fEmbeddedHint = XML_COMMENT_TEXT;
	fEmbeddedPostState = ST_XML_COMMENT;
	yybegin(ST_XML_COMMENT);
	return XML_COMMENT_OPEN;
 }
        case 736: break;
        case 532: 
        case 553: 
        case 556: 
        case 560: 
        case 561: 
        case 563: 
        case 565: 
        case 568: 
        case 570: 
        case 571: 
        case 573: 
        case 575: 
        case 578: 
          { 
	/* JSP comment begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(3);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(4);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(4);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(4);
		return scanJSPCommentText();
	}
	else if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)  {
		yybegin(ST_JSP_COMMENT);
		assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN)
			yybegin(ST_BLOCK_TAG_SCAN);
		return PROXY_CONTEXT;
	}
	// finished sanity checks
	if(yystate()==YYINITIAL) {
		// the simple case, just a regular scriptlet out in content
		if(Debug.debugTokenizer)
			dump("\nJSP comment start");//$NON-NLS-1$
		yybegin(ST_JSP_COMMENT);
		return JSP_COMMENT_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspCommentStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP comment start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_COMMENT);
		// the comment container itself will act as comment text
		fEmbeddedHint = JSP_COMMENT_TEXT;
		assembleEmbeddedContainer(JSP_COMMENT_OPEN, JSP_COMMENT_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		/*
		 * required help for successive embedded regions; mark this one as a
		 * comment so it will be otherwise ignored but preserved (which is why
		 * we can't use white-space)
		 */
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 737: break;
        case 417: 
        case 418: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 738: break;
        case 416: 
          { 
	if(Debug.debugTokenizer)
		dump("comment end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	yybegin(YYINITIAL);
	return XML_COMMENT_CLOSE;
 }
        case 739: break;
        case 415: 
          { 
	if(Debug.debugTokenizer)
		dump("CDATA end");//$NON-NLS-1$
	yybegin(fStateStack.pop());
	return XML_CDATA_CLOSE;
 }
        case 740: break;
        case 413: 
          { 
	yybegin(ST_JSP_VBL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_CONTENT;
	fEmbeddedPostState = YYINITIAL;
	assembleEmbeddedContainer(JSP_VBL_OPEN, JSP_VBL_CLOSE);
	fEmbeddedHint = XML_CONTENT;
	yybegin(YYINITIAL);
	return PROXY_CONTEXT;
 }
        case 741: break;
        case 412: 
          { 
	if(Debug.debugTokenizer)
		dump("\nPEReference");//$NON-NLS-1$
	return XML_PE_REFERENCE;
 }
        case 742: break;
        case 410: 
          { 
	yybegin(ST_JSP_EL);
	if(yylength() > 2)
		yypushback(yylength() - 2);
	fELlevel++;
	fEmbeddedHint = XML_CONTENT;
	fEmbeddedPostState = YYINITIAL;
	assembleEmbeddedContainer(JSP_EL_OPEN, JSP_EL_CLOSE);
	fEmbeddedHint = XML_CONTENT;
	yybegin(YYINITIAL);
	return PROXY_CONTEXT;
 }
        case 743: break;
        case 406: 
          { 
	if(Debug.debugTokenizer)
		dump("\nEntityRef");//$NON-NLS-1$
	return XML_ENTITY_REFERENCE;
 }
        case 744: break;
        case 400: 
        case 457: 
        case 467: 
        case 482: 
        case 487: 
        case 492: 
        case 497: 
        case 503: 
        case 509: 
        case 513: 
        case 518: 
        case 523: 
        case 529: 
          { 
	/* JSP expression begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just an expression out in content
		if(Debug.debugTokenizer)
			dump("\nJSP expression start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_EXPRESSION_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspExpressionStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP expression start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_EXPRESSION_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		
		return PROXY_CONTEXT;
	}
 }
        case 745: break;
        case 399: 
        case 456: 
        case 466: 
        case 481: 
        case 486: 
        case 491: 
        case 496: 
        case 502: 
        case 508: 
        case 512: 
        case 517: 
        case 522: 
        case 528: 
          { 
	/* JSP declaration begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a declaration out in content
		if(Debug.debugTokenizer)
			dump("\nJSP declaration start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_DECLARATION_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspDeclarationStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP declaration start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_DECLARATION_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 746: break;
        case 398: 
        case 455: 
        case 465: 
        case 480: 
        case 485: 
        case 490: 
        case 495: 
        case 501: 
        case 507: 
        case 511: 
        case 516: 
        case 521: 
        case 527: 
          { 
	/* JSP directive begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(2);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(3);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(3);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(3);
		return scanJSPCommentText();
	}
	// end sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a declaration out in content
		if(Debug.debugTokenizer)
			dump("\nJSP directive start");//$NON-NLS-1$
		yybegin(ST_JSP_DIRECTIVE_NAME);
		return JSP_DIRECTIVE_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspDirectiveStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP declaration start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_DIRECTIVE_NAME);
		assembleEmbeddedContainer(JSP_DIRECTIVE_OPEN, new String[]{JSP_DIRECTIVE_CLOSE, JSP_CLOSE});
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		return PROXY_CONTEXT;
	}
 }
        case 747: break;
        case 388: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 748: break;
        case 384: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES_END);
	return JSP_VBL_QUOTED_CONTENT;
 }
        case 749: break;
        case 382: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_VBL_OPEN;
	}
 }
        case 750: break;
        case 372: 
          { 
	yybegin(ST_JSP_EL_DQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 751: break;
        case 368: 
          { 
	yybegin(ST_JSP_EL_SQUOTES_END);
	return JSP_EL_QUOTED_CONTENT;
 }
        case 752: break;
        case 366: 
          { 
	//System.out.println(JSP_EL_CONTENT+ ":[" + yytext() + "]");
	return JSP_EL_CONTENT;
 }
        case 753: break;
        case 365: 
          { 
	fELlevel++;
	if(fELlevel == 1) {
		return JSP_EL_OPEN;
	}
 }
        case 754: break;
        case 362: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_DQUOTED_VBL);
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
	// abort early when an unescaped double quote is found in the VBL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 755: break;
        case 361: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_DQUOTED_EL);
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_DQUOTE, JSP_TAG_ATTRIBUTE_VALUE_DQUOTE});
	// abort early when an unescaped double quote is found in the EL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_DQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_DQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 756: break;
        case 360: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_SQUOTED_VBL);
	assembleEmbeddedContainer(JSP_VBL_OPEN, new String[]{JSP_VBL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
	// abort early when an unescaped single quote is found in the VBL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 757: break;
        case 359: 
          { 
	int enterState = yystate();
	yybegin(ST_JSP_SQUOTED_EL);
	assembleEmbeddedContainer(JSP_EL_OPEN, new String[]{JSP_EL_CLOSE, XML_TAG_ATTRIBUTE_VALUE_SQUOTE, JSP_TAG_ATTRIBUTE_VALUE_SQUOTE});
	// abort early when an unescaped single quote is found in the EL
	if(fEmbeddedContainer.getLastRegion().getType().equals(XML_TAG_ATTRIBUTE_VALUE_SQUOTE) || fEmbeddedContainer.getLastRegion().getType().equals(JSP_TAG_ATTRIBUTE_VALUE_SQUOTE)) {
		yybegin(ST_ABORT_EMBEDDED);
		fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	}
	else {
		yybegin(enterState);
	}
	return PROXY_CONTEXT;
 }
        case 758: break;
        case 357: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", genericEndTagOpen");//$NON-NLS-1$
	}
	int incomingState = yystate();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - end tag");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_END_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
	return PROXY_CONTEXT;
 }
        case 759: break;
        case 301: 
        case 315: 
        case 321: 
          { 
	return XML_DOCTYPE_INTERNAL_SUBSET;
 }
        case 760: break;
        case 287: 
          { 
	String tagName = yytext().substring(1);
	// pushback to just after the opening bracket
	yypushback(yylength() - 1);
	/*
	 * If this tag can not be nested or we're already searching for an
	 * attribute name, equals, or value, return immediately.
	 */
	if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
		yybegin(ST_XML_TAG_NAME);
		return XML_TAG_OPEN;
	}
	if(Debug.debugTokenizer)
		dump("tag in place of attr value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	// embedded container should be looking for the name (again) next
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
	fStateStack.pop();
	yybegin(ST_XML_ATTRIBUTE_NAME);
	return PROXY_CONTEXT;
 }
        case 761: break;
        case 285: 
          { 
	String tagName = yytext().substring(1);
	// pushback to just after the opening bracket
	yypushback(yylength() - 1);
	/*
	 * If this tag can not be nested or we're already searching for an
	 * attribute name, equals, or value, return immediately.
	 */
	if (!isNestable(tagName) || (!fStateStack.empty() && (fStateStack.peek() == ST_XML_ATTRIBUTE_NAME || fStateStack.peek() == ST_XML_EQUALS || fStateStack.peek() == ST_XML_ATTRIBUTE_VALUE || fStateStack.peek() == ST_JSP_ATTRIBUTE_VALUE))) {
		yybegin(ST_XML_TAG_NAME);
		return XML_TAG_OPEN;
	}
	if(Debug.debugTokenizer)
		dump("tag in place of attr name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	// embedded container should be looking for the name (again) next
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedTagSequence(XML_TAG_OPEN, tagName); // ?
	fStateStack.pop();
	yybegin(ST_XML_EQUALS);
	return PROXY_CONTEXT;
 }
        case 762: break;
        case 283: 
          { 
        yybegin(YYINITIAL);
	fEmbeddedHint = UNDEFINED;
	if(Debug.debugTokenizer)
		dump("empty tag close");//$NON-NLS-1$

	if (fEmbeddedContainer != null)
		fInTagEmbedded = false;
	else
		fInTagContainer = false;

	return XML_EMPTY_TAG_CLOSE;
 }
        case 763: break;
        case 274: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return JSP_DIRECTIVE_CLOSE;
 }
        case 764: break;
        case 272: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return JSP_CLOSE;
 }
        case 765: break;
        case 127: 
        case 172: 
          { 
	String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_DQUOTE : JSP_TAG_ATTRIBUTE_VALUE_DQUOTE;

	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
	yybegin(ST_XML_ATTRIBUTE_VALUE_DQUOTED);
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - complex double quoted");//$NON-NLS-1$
	assembleEmbeddedContainer(type, type);
	fStateStack.pop();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	yybegin(ST_XML_ATTRIBUTE_NAME);
	if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
		fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
		return PROXY_UNKNOWN_CONTEXT;
	}
	return PROXY_CONTEXT;
 }
        case 766: break;
        case 125: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", unquoted genericTagOpen");//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP tag embedded name start - start tag");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	fStateStack.pop();
        yybegin(ST_XML_ATTRIBUTE_NAME);
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
	return PROXY_CONTEXT;
 }
        case 767: break;
        case 123: 
          { 
	if(Debug.debugTokenizer)
		dump("equals");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(isJspTag() ? ST_JSP_ATTRIBUTE_VALUE : ST_XML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 768: break;
        case 122: 
          { 
	if(Debug.debugTokenizer)
		dump("attr name");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 769: break;
        case 118: 
        case 119: 
        case 120: 
        case 284: 
        case 430: 
        case 542: 
        case 583: 
        case 584: 
        case 603: 
        case 604: 
        case 622: 
        case 623: 
        case 636: 
        case 645: 
        case 653: 
        case 655: 
        case 657: 
        case 659: 
        case 662: 
        case 668: 
        case 669: 
        case 670: 
        case 671: 
        case 672: 
        case 678: 
        case 679: 
        case 680: 
        case 681: 
        case 682: 
        case 688: 
        case 689: 
        case 691: 
        case 692: 
        case 698: 
        case 699: 
        case 700: 
        case 701: 
        case 707: 
        case 708: 
        case 709: 
        case 710: 
        case 713: 
        case 714: 
        case 716: 
          { 
	if(Debug.debugTokenizer)
		dump("tag name");//$NON-NLS-1$
    String tagname = yytext();
    boolean jspTag = tagname.indexOf(':') != -1;
	if (fEmbeddedContainer != null) {
    	fEmbeddedTag = jspTag;
		fInTagEmbedded = true;
    }
	else {
		fContainerTag = jspTag;
		fInTagContainer = true;
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
        return XML_TAG_NAME;
 }
        case 770: break;
        case 116: 
          { 
	if(Debug.debugTokenizer)
		dump("tag close");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	if(isBlockMarker()) {
		fEmbeddedHint = getBlockMarkerContext();
		fEmbeddedPostState = ST_BLOCK_TAG_SCAN;
        	yybegin(ST_BLOCK_TAG_SCAN);
	}
	else
        	yybegin(YYINITIAL);

	if (fEmbeddedContainer != null)
		fInTagEmbedded = false;
	else
		fInTagContainer = false;

	return XML_TAG_CLOSE;
 }
        case 771: break;
        case 109: 
        case 113: 
        case 277: 
          { 
	if(Debug.debugTokenizer)
		dump("attr value");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 772: break;
        case 108: 
          { 
	if(Debug.debugTokenizer)
		dump("equals");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 773: break;
        case 107: 
          { 
	if(Debug.debugTokenizer)
		dump("attr name");//$NON-NLS-1$
        yybegin(ST_JSP_DIRECTIVE_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 774: break;
        case 104: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP directive name");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_NAME_WHITESPACE);
	return JSP_DIRECTIVE_NAME;
 }
        case 775: break;
        case 100: 
        case 101: 
        case 102: 
          { 
	if(Debug.debugTokenizer)
		dump("JSP code content");//$NON-NLS-1$
	return doScan("%>", false, false, false, JSP_CONTENT, ST_JSP_CONTENT, ST_JSP_CONTENT);
 }
        case 776: break;
        case 96: 
        case 98: 
        case 99: 
        case 265: 
        case 266: 
        case 267: 
        case 270: 
        case 271: 
        case 424: 
        case 427: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction attribute value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_DHTML_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 777: break;
        case 95: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction '='");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_DHTML_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 778: break;
        case 94: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_DHTML_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 779: break;
        case 92: 
          { 
	if(Debug.debugTokenizer)
		dump("DHTML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 780: break;
        case 86: 
        case 88: 
        case 254: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction attribute value");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_PI_ATTRIBUTE_NAME);
        return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 781: break;
        case 85: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction '='");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_PI_ATTRIBUTE_VALUE);
        return XML_TAG_ATTRIBUTE_EQUALS;
 }
        case 782: break;
        case 50: 
        case 209: 
        case 210: 
        case 213: 
        case 223: 
        case 224: 
        case 227: 
        case 228: 
        case 393: 
        case 396: 
        case 506: 
        case 520: 
        case 526: 
          { 
	return JSP_VBL_CONTENT;
 }
        case 783: break;
        case 43: 
        case 187: 
        case 188: 
        case 191: 
        case 201: 
        case 202: 
        case 206: 
        case 207: 
        case 363: 
        case 377: 
        case 380: 
        case 478: 
        case 479: 
        case 494: 
        case 500: 
          { 
	return JSP_EL_CONTENT;
 }
        case 784: break;
        case 35: 
        case 161: 
        case 162: 
        case 345: 
        case 464: 
        case 468: 
        case 557: 
        case 591: 
        case 611: 
        case 628: 
        case 638: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist contentspec");//$NON-NLS-1$
	return XML_ATTLIST_DECL_CONTENT;
 }
        case 785: break;
        case 33: 
        case 154: 
        case 155: 
        case 333: 
        case 454: 
        case 458: 
        case 554: 
        case 590: 
        case 610: 
        case 627: 
        case 637: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl contentspec");//$NON-NLS-1$
	return XML_ELEMENT_DECL_CONTENT;
 }
        case 786: break;
        case 22: 
        case 114: 
          { 
	if(Debug.debugTokenizer)
		dump("inappropriate tag name");//$NON-NLS-1$
	if(!fStateStack.empty() && (fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_SQUOTED||fStateStack.peek()==ST_XML_ATTRIBUTE_VALUE_DQUOTED)) {
		yybegin(ST_ABORT_EMBEDDED);
		//yypushback(yylength()-1);
		return UNDEFINED;
	}
	yybegin(YYINITIAL);
        return XML_CONTENT;
 }
        case 787: break;
        case 18: 
        case 106: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
	yybegin(ST_JSP_DIRECTIVE_ATTRIBUTE_NAME);
	return WHITE_SPACE;
 }
        case 788: break;
        case 5: 
        case 8: 
        case 9: 
        case 10: 
        case 12: 
        case 13: 
        case 14: 
        case 15: 
        case 17: 
        case 19: 
        case 20: 
        case 21: 
        case 23: 
        case 24: 
        case 25: 
        case 26: 
        case 27: 
        case 28: 
        case 29: 
        case 30: 
        case 31: 
        case 32: 
        case 34: 
        case 40: 
        case 41: 
        case 42: 
        case 74: 
        case 178: 
        case 183: 
          { 
	if(Debug.debugTokenizer)
		dump("white space");//$NON-NLS-1$
        return WHITE_SPACE;
 }
        case 789: break;
        case 0: 
        case 57: 
        case 60: 
        case 61: 
        case 63: 
        case 235: 
        case 237: 
        case 240: 
        case 242: 
        case 403: 
        case 404: 
        case 405: 
        case 409: 
        case 411: 
        case 414: 
        case 535: 
          { 
	if(Debug.debugTokenizer)
		dump("\nXML content");//$NON-NLS-1$
	return XML_CONTENT;
 }
        case 790: break;
        case 58: 
        case 103: 
        case 115: 
        case 121: 
        case 131: 
          { 
	if(Debug.debugTokenizer)
		dump("\nstart tag open");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_TAG_OPEN;
 }
        case 791: break;
        case 59: 
        case 62: 
        case 66: 
        case 67: 
        case 68: 
        case 72: 
        case 73: 
        case 83: 
        case 87: 
        case 89: 
        case 90: 
        case 91: 
        case 93: 
        case 97: 
        case 105: 
        case 110: 
        case 111: 
        case 112: 
        case 117: 
        case 126: 
        case 133: 
        case 134: 
        case 135: 
        case 136: 
        case 138: 
        case 139: 
        case 141: 
        case 142: 
        case 143: 
        case 146: 
        case 147: 
        case 148: 
        case 151: 
        case 152: 
        case 153: 
        case 158: 
        case 159: 
        case 160: 
        case 168: 
        case 170: 
        case 171: 
        case 193: 
        case 194: 
        case 197: 
        case 198: 
        case 204: 
        case 208: 
        case 215: 
        case 216: 
        case 219: 
        case 220: 
        case 225: 
        case 229: 
          { 
	if (Debug.debugTokenizer)
		System.out.println("!!!unexpected!!!: \"" + yytext() + "\":" + //$NON-NLS-2$//$NON-NLS-1$
			yychar + "-" + (yychar + yylength()));//$NON-NLS-1$
	return UNDEFINED;
 }
        case 792: break;
        case 64: 
        case 65: 
          { 
	if(Debug.debugTokenizer)
		dump("CDATA text");//$NON-NLS-1$
	fEmbeddedPostState = ST_CDATA_TEXT;
	fEmbeddedHint = XML_CDATA_TEXT;
	String returnedContext = doScan("]]>", false, true, true, XML_CDATA_TEXT, ST_CDATA_END,  ST_CDATA_END);//$NON-NLS-1$
	if(returnedContext == XML_CDATA_TEXT)
		yybegin(ST_CDATA_END);
	return returnedContext;
 }
        case 793: break;
        case 69: 
        case 196: 
        case 200: 
        case 218: 
        case 222: 
          { 
	if(Debug.debugTokenizer)
		dump("LINE FEED");//$NON-NLS-1$
	return WHITE_SPACE;
 }
        case 794: break;
        case 70: 
        case 71: 
          { 
	if(Debug.debugTokenizer)
		dump("comment content");//$NON-NLS-1$
	return scanXMLCommentText();
 }
        case 795: break;
        case 75: 
        case 76: 
        case 77: 
        case 78: 
        case 247: 
        case 248: 
        case 249: 
        case 419: 
        case 538: 
        case 539: 
        case 581: 
        case 582: 
        case 601: 
        case 621: 
        case 634: 
        case 644: 
        case 652: 
        case 654: 
        case 656: 
        case 658: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction target");//$NON-NLS-1$
	fEmbeddedHint = XML_CONTENT;
        yybegin(ST_PI_WS);
        return XML_TAG_NAME;
 }
        case 796: break;
        case 79: 
          { 
        yybegin(ST_PI_CONTENT);
        return WHITE_SPACE;
 }
        case 797: break;
        case 80: 
        case 81: 
        case 82: 
          { 
		// block scan until close is found
	return doScan("?>", false, false, false, XML_PI_CONTENT, ST_XML_PI_TAG_CLOSE, ST_XML_PI_TAG_CLOSE);
 }
        case 798: break;
        case 84: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction attribute name");//$NON-NLS-1$
        yybegin(ST_XML_PI_EQUALS);
        return XML_TAG_ATTRIBUTE_NAME;
 }
        case 799: break;
        case 128: 
        case 173: 
          { 
	String type = yy_lexical_state == ST_XML_ATTRIBUTE_VALUE ? XML_TAG_ATTRIBUTE_VALUE_SQUOTE : JSP_TAG_ATTRIBUTE_VALUE_SQUOTE;
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", "+type);//$NON-NLS-1$
	}
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
	yybegin(ST_XML_ATTRIBUTE_VALUE_SQUOTED);
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("JSP attribute value start - complex single quoted");//$NON-NLS-1$
	assembleEmbeddedContainer(type, type);
	fStateStack.pop();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
	fEmbeddedPostState = ST_XML_EQUALS;
        yybegin(ST_XML_ATTRIBUTE_NAME);
    if (fEmbeddedContainer.getLastRegion().getType() == UNDEFINED) {
		fProxyUnknownRegion = fRegionFactory.createToken(XML_TAG_ATTRIBUTE_VALUE, fEmbeddedContainer.getStart(), fEmbeddedContainer.getTextLength(), fEmbeddedContainer.getLength());
		return PROXY_UNKNOWN_CONTEXT;
	}
	return PROXY_CONTEXT;
 }
        case 800: break;
        case 132: 
          { 
	if(Debug.debugTokenizer)
		dump("declaration end");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 801: break;
        case 137: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype type");//$NON-NLS-1$
	yybegin(ST_XML_DOCTYPE_EXTERNAL_ID);
	return XML_DOCTYPE_NAME;
 }
        case 802: break;
        case 140: 
        case 144: 
        case 306: 
        case 311: 
        case 446: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype public reference");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_DOCTYPE_ID_SYSTEM);
	return XML_DOCTYPE_EXTERNAL_ID_PUBREF;
 }
        case 803: break;
        case 145: 
        case 149: 
        case 318: 
          { 
	if(Debug.debugTokenizer)
		dump("doctype system reference");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_DECLARATION_CLOSE);
	return XML_DOCTYPE_EXTERNAL_ID_SYSREF;
 }
        case 804: break;
        case 150: 
        case 324: 
        case 329: 
        case 451: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl name");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_ELEMENT_DECLARATION_CONTENT);
	return XML_ELEMENT_DECL_NAME;
 }
        case 805: break;
        case 156: 
          { 
	if(Debug.debugTokenizer)
		dump("elementdecl close");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 806: break;
        case 157: 
        case 336: 
        case 341: 
        case 461: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist name");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
	fEmbeddedPostState = YYINITIAL;
	yybegin(ST_XML_ATTLIST_DECLARATION_CONTENT);
	return XML_ATTLIST_DECL_NAME;
 }
        case 807: break;
        case 163: 
          { 
	if(Debug.debugTokenizer)
		dump("attlist close");//$NON-NLS-1$
	if (Debug.debugTokenizer) {
		if(fStateStack.peek()!=YYINITIAL)
			System.out.println("end embedded region");//$NON-NLS-1$
	}
	yybegin(fStateStack.pop());
	return XML_DECLARATION_CLOSE;
 }
        case 808: break;
        case 166: 
        case 167: 
          { 
	if(Debug.debugTokenizer)
		dump("\nJSP comment text");//$NON-NLS-1$
	return scanJSPCommentText();
 }
        case 809: break;
        case 176: 
        case 180: 
        case 181: 
        case 182: 
        case 185: 
        case 186: 
        case 358: 
          { 
	return XML_TAG_ATTRIBUTE_VALUE;
 }
        case 810: break;
        case 177: 
          { 
	if (Debug.debugTokenizer) {
		System.out.println("begin embedded region: " + fEmbeddedHint+", genericTagOpen");//$NON-NLS-1$
	}
	int incomingState = yystate();
	fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
	if(Debug.debugTokenizer)
		dump("tag inside of JSP attribute value start");//$NON-NLS-1$
	yybegin(ST_XML_TAG_NAME);
	assembleEmbeddedContainer(XML_TAG_OPEN, new String[]{XML_TAG_CLOSE,XML_EMPTY_TAG_CLOSE});
	if(yystate() != ST_ABORT_EMBEDDED)
        yybegin(incomingState);
	return PROXY_CONTEXT;
 }
        case 811: break;
        case 179: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_SQUOTE : XML_TAG_ATTRIBUTE_VALUE_SQUOTE;
 }
        case 812: break;
        case 184: 
          { 
	return isJspTag()? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE : XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 813: break;
        case 189: 
          { 
	yybegin(ST_JSP_EL_DQUOTES);
	return JSP_EL_DQUOTE;
 }
        case 814: break;
        case 190: 
          { 
	yybegin(ST_JSP_EL_SQUOTES);
	return JSP_EL_SQUOTE;
 }
        case 815: break;
        case 192: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_EL_CLOSE;
	}
	return JSP_EL_CONTENT;
 }
        case 816: break;
        case 195: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_SQUOTE;
 }
        case 817: break;
        case 199: 
          { 
	yybegin(ST_JSP_EL);
	return JSP_EL_DQUOTE;
 }
        case 818: break;
        case 203: 
          { 
	return isJspTag() ? JSP_TAG_ATTRIBUTE_VALUE_DQUOTE: XML_TAG_ATTRIBUTE_VALUE_DQUOTE;
 }
        case 819: break;
        case 205: 
          { 
	return JSP_EL_CLOSE;
 }
        case 820: break;
        case 211: 
          { 
	yybegin(ST_JSP_VBL_DQUOTES);
	return JSP_VBL_DQUOTE;
 }
        case 821: break;
        case 212: 
          { 
	yybegin(ST_JSP_VBL_SQUOTES);
	return JSP_VBL_SQUOTE;
 }
        case 822: break;
        case 214: 
          { 
	fELlevel--;
	if(fELlevel == 0) {
		yybegin(YYINITIAL);
		return JSP_VBL_CLOSE;
	}
	return JSP_VBL_CONTENT;
 }
        case 823: break;
        case 217: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_SQUOTE;
 }
        case 824: break;
        case 221: 
          { 
	yybegin(ST_JSP_VBL);
	return JSP_VBL_DQUOTE;
 }
        case 825: break;
        case 226: 
          { 
	return JSP_VBL_CLOSE;
 }
        case 826: break;
        case 230: 
          { 
	if(Debug.debugTokenizer)
		dump("\nend tag open");//$NON-NLS-1$
	fEmbeddedHint = XML_TAG_NAME;
	fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        yybegin(ST_XML_TAG_NAME);
        return XML_END_TAG_OPEN;
 }
        case 827: break;
        case 231: 
          { 
	if(Debug.debugTokenizer)
		dump("\nprocessing instruction start");//$NON-NLS-1$
	yybegin(ST_PI);
        return XML_PI_OPEN;
 }
        case 828: break;
        case 232: 
        case 332: 
        case 344: 
        case 364: 
        case 369: 
        case 373: 
        case 376: 
        case 379: 
        case 381: 
        case 385: 
        case 389: 
        case 392: 
        case 395: 
          { 
	/* JSP scriptlet begun (anywhere)
	 * A consequence of the start anywhere possibility is that the
	 *  incoming state must be checked to see if it's erroneous
	 *  due to the order of precedence generated
	 */
	// begin sanity checks
	if(yystate() == ST_JSP_CONTENT) {
		// at the beginning?!
		yypushback(1);
		return JSP_CONTENT;
	}
	else if(yystate() == ST_BLOCK_TAG_SCAN) {
		yypushback(2);
		return doBlockTagScan();
	}
	else if(yystate() == ST_XML_COMMENT) {
		yypushback(2);
		return scanXMLCommentText();
	}
	else if(yystate() == ST_JSP_COMMENT) {
		yypushback(2);
		return scanJSPCommentText();
	}
	// finished sanity checks
	fStateStack.push(yystate());
	if(fStateStack.peek()==YYINITIAL) {
		// the simple case, just a regular scriptlet out in content
		if(Debug.debugTokenizer)
			dump("\nJSP scriptlet start");//$NON-NLS-1$
		yybegin(ST_JSP_CONTENT);
		return JSP_SCRIPTLET_OPEN;
	}
	else {
		if (Debug.debugTokenizer) {
			System.out.println("begin embedded region: " + fEmbeddedHint+", jspScriptletStart");//$NON-NLS-1$
		}
		if(Debug.debugTokenizer)
			dump("JSP scriptlet start");//$NON-NLS-1$
		if(yystate() == ST_XML_ATTRIBUTE_VALUE_DQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_DQUOTED;
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE_SQUOTED)
			fEmbeddedPostState = ST_XML_ATTRIBUTE_VALUE_SQUOTED;
		else if(yystate() == ST_CDATA_TEXT) {
			fEmbeddedPostState = ST_CDATA_TEXT;
			fEmbeddedHint = XML_CDATA_TEXT;
		}
		yybegin(ST_JSP_CONTENT);
		assembleEmbeddedContainer(JSP_SCRIPTLET_OPEN, JSP_CLOSE);
		if(yystate() == ST_BLOCK_TAG_INTERNAL_SCAN) {
			yybegin(ST_BLOCK_TAG_SCAN);
			return BLOCK_TEXT;
		}
		// required help for successive embedded regions
		if(yystate() == ST_XML_TAG_NAME) {
			fEmbeddedHint = XML_TAG_NAME;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
		else if((yystate() == ST_XML_ATTRIBUTE_NAME || yystate() == ST_XML_EQUALS)) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_NAME;
			fEmbeddedPostState = ST_XML_EQUALS;
		}
		else if(yystate() == ST_XML_ATTRIBUTE_VALUE) {
			fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
			fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
		}
        else if(yystate() == ST_JSP_ATTRIBUTE_VALUE) {
            fEmbeddedHint = XML_TAG_ATTRIBUTE_VALUE;
            fEmbeddedPostState = ST_XML_ATTRIBUTE_NAME;
        }
		
		return PROXY_CONTEXT;
	}
 }
        case 829: break;
        case 233: 
          { 
	fStateStack.push(yystate());
	if(Debug.debugTokenizer)
		dump("\ndeclaration start");//$NON-NLS-1$
        yybegin(ST_XML_DECLARATION);
	return XML_DECLARATION_OPEN;
 }
        case 830: break;
        case 246: 
          { 
	if(Debug.debugTokenizer)
		dump("processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 831: break;
        case 250: 
          { 
		// ended with nothing inside
		fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 832: break;
        case 251: 
          { 
	if(Debug.debugTokenizer)
		dump("XML processing instruction end");//$NON-NLS-1$
	fEmbeddedHint = UNDEFINED;
        yybegin(YYINITIAL);
        return XML_PI_CLOSE;
 }
        case 833: break;
        case 164: 
        case 165: 
          { 
		return doBlockTagScan();
	 }
        case 834: break;
        default: 
          if (yy_input == YYEOF && yy_startRead == yy_currentPos) {
            yy_atEOF = true;
            yy_do_eof();
              return null;
          } 
          else {
            yy_ScanError(YY_NO_MATCH);
          }
      }
    }
  }    


}
