// Generated by JFlex 1.9.1 http://jflex.de/  (tweaked for IntelliJ platform)
// source: Sh.flex

package com.intellij.sh.lexer;

import com.intellij.psi.tree.IElementType;
import com.intellij.util.containers.IntStack;
import com.intellij.lexer.FlexLexer;
import static com.intellij.sh.lexer.ShTokenTypes.*;
import com.intellij.openapi.util.text.StringUtil;


public class _ShLexerGen implements FlexLexer {

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

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

  /** lexical states */
  public static final int YYINITIAL = 0;
  public static final int OLD_ARITHMETIC_EXPRESSION = 2;
  public static final int LET_EXPRESSION = 4;
  public static final int EVAL_EXPRESSION = 6;
  public static final int TEST_EXPRESSION = 8;
  public static final int CONDITIONAL_EXPRESSION = 10;
  public static final int IF_CONDITION = 12;
  public static final int OTHER_CONDITIONS = 14;
  public static final int CASE_CONDITION = 16;
  public static final int CASE_PATTERN = 18;
  public static final int STRING_EXPRESSION = 20;
  public static final int REGULAR_EXPRESSION = 22;
  public static final int HERE_STRING = 24;
  public static final int HERE_DOC_START_MARKER = 26;
  public static final int HERE_DOC_END_MARKER = 28;
  public static final int HERE_DOC_PIPELINE = 30;
  public static final int HERE_DOC_BODY = 32;
  public static final int PARAMETER_EXPANSION = 34;
  public static final int PARAMETER_EXPANSION_WITHOUT_SEPARATOR = 36;
  public static final int PARAMETER_EXPANSION_EXPR = 38;
  public static final int PARENTHESES_COMMAND_SUBSTITUTION = 40;
  public static final int BACKQUOTE_COMMAND_SUBSTITUTION = 42;

  /**
   * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
   * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
   *                  at the beginning of a line
   * l is of the form l = 2*k, k a non negative integer
   */
  private static final int ZZ_LEXSTATE[] = {
     0,  1,  2,  3,  4,  5,  6,  6,  7,  8,  9, 10,  0,  1,  0,  1, 
    11, 12, 13, 14, 15, 15, 16, 16, 17, 18, 19, 19, 20, 20, 21, 22, 
    23, 23, 24, 24, 25, 25, 26, 26, 27, 28,  0, 1
  };

  /**
   * Top-level table for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_TOP = zzUnpackcmap_top();

  private static final String ZZ_CMAP_TOP_PACKED_0 =
    "\1\0\1\u0100\1\u0200\1\u0300\1\u0400\1\u0500\1\u0600\1\u0700"+
    "\1\u0800\1\u0900\1\u0a00\1\u0b00\1\u0c00\1\u0d00\1\u0e00\1\u0f00"+
    "\1\u1000\1\u0100\1\u1100\1\u1200\1\u1300\1\u0100\1\u1400\1\u1500"+
    "\1\u1600\1\u1700\1\u1800\1\u1900\1\u1a00\1\u1b00\1\u0100\1\u1c00"+
    "\1\u1d00\1\u1e00\12\u1f00\1\u2000\1\u2100\1\u2200\1\u1f00\1\u2300"+
    "\1\u2400\2\u1f00\31\u0100\1\u2500\121\u0100\1\u2600\4\u0100\1\u2700"+
    "\1\u0100\1\u2800\1\u2900\1\u2a00\1\u2b00\1\u2c00\1\u2d00\53\u0100"+
    "\1\u2e00\41\u1f00\1\u0100\1\u2f00\1\u3000\1\u0100\1\u3100\1\u3200"+
    "\1\u3300\1\u3400\1\u1f00\1\u3500\1\u3600\1\u3700\1\u3800\1\u0100"+
    "\1\u3900\1\u3a00\1\u3b00\1\u3c00\1\u3d00\1\u3e00\1\u3f00\1\u1f00"+
    "\1\u4000\1\u4100\1\u4200\1\u4300\1\u4400\1\u4500\1\u4600\1\u4700"+
    "\1\u4800\1\u4900\1\u4a00\1\u4b00\1\u1f00\1\u4c00\1\u4d00\1\u4e00"+
    "\1\u1f00\3\u0100\1\u4f00\1\u5000\1\u5100\12\u1f00\4\u0100\1\u5200"+
    "\17\u1f00\2\u0100\1\u5300\41\u1f00\2\u0100\1\u5400\1\u5500\2\u1f00"+
    "\1\u5600\1\u5700\27\u0100\1\u5800\2\u0100\1\u5900\45\u1f00\1\u0100"+
    "\1\u5a00\1\u5b00\11\u1f00\1\u5c00\27\u1f00\1\u5d00\1\u5e00\1\u5f00"+
    "\1\u6000\11\u1f00\1\u6100\1\u6200\5\u1f00\1\u6300\1\u6400\4\u1f00"+
    "\1\u6500\21\u1f00\246\u0100\1\u6600\20\u0100\1\u6700\1\u6800\25\u0100"+
    "\1\u6900\34\u0100\1\u6a00\14\u1f00\2\u0100\1\u6b00\u0e05\u1f00";

  private static int [] zzUnpackcmap_top() {
    int [] result = new int[4352];
    int offset = 0;
    offset = zzUnpackcmap_top(ZZ_CMAP_TOP_PACKED_0, offset, result);
    return result;
  }

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


  /**
   * Second-level tables for translating characters to character classes
   */
  private static final int [] ZZ_CMAP_BLOCKS = zzUnpackcmap_blocks();

  private static final String ZZ_CMAP_BLOCKS_PACKED_0 =
    "\11\0\1\1\1\2\1\0\1\3\1\4\22\0\1\5"+
    "\1\6\1\7\1\10\1\11\1\12\1\13\1\14\1\15"+
    "\1\16\1\17\1\20\1\21\1\22\1\23\1\24\1\25"+
    "\1\26\3\27\1\30\1\31\1\32\2\33\1\34\1\35"+
    "\1\36\1\37\1\40\1\41\1\42\6\43\21\44\1\45"+
    "\2\44\1\46\1\47\1\50\1\51\1\52\1\53\1\54"+
    "\1\43\1\55\1\56\1\57\1\60\1\44\1\61\1\62"+
    "\2\44\1\63\1\44\1\64\1\65\2\44\1\66\1\67"+
    "\1\70\1\71\1\72\1\73\1\45\2\44\1\74\1\75"+
    "\1\76\1\77\53\0\1\100\12\0\1\100\4\0\1\100"+
    "\5\0\27\100\1\101\37\100\1\101\u01ca\100\4\0\14\100"+
    "\16\0\5\100\7\0\1\100\1\0\1\100\201\0\5\100"+
    "\1\0\2\100\2\0\4\100\1\0\1\100\6\0\1\100"+
    "\1\0\3\100\1\0\1\100\1\0\24\100\1\0\123\100"+
    "\1\0\213\100\10\0\246\100\1\0\46\100\2\0\1\100"+
    "\6\0\51\100\107\0\33\100\4\0\4\100\55\0\53\100"+
    "\25\0\12\102\4\0\2\100\1\0\143\100\1\0\1\100"+
    "\17\0\2\100\7\0\2\100\12\102\3\100\2\0\1\100"+
    "\20\0\1\100\1\0\36\100\35\0\131\100\13\0\1\100"+
    "\16\0\12\102\41\100\11\0\2\100\4\0\1\100\5\0"+
    "\26\100\4\0\1\100\11\0\1\100\3\0\1\100\27\0"+
    "\31\100\7\0\13\100\65\0\25\100\1\0\10\100\106\0"+
    "\66\100\3\0\1\100\22\0\1\100\7\0\12\100\4\0"+
    "\12\102\1\0\20\100\4\0\10\100\2\0\2\100\2\0"+
    "\26\100\1\0\7\100\1\0\1\100\3\0\4\100\3\0"+
    "\1\100\20\0\1\100\15\0\2\100\1\0\3\100\4\0"+
    "\12\102\2\100\12\0\1\100\10\0\6\100\4\0\2\100"+
    "\2\0\26\100\1\0\7\100\1\0\2\100\1\0\2\100"+
    "\1\0\2\100\37\0\4\100\1\0\1\100\7\0\12\102"+
    "\2\0\3\100\20\0\11\100\1\0\3\100\1\0\26\100"+
    "\1\0\7\100\1\0\2\100\1\0\5\100\3\0\1\100"+
    "\22\0\1\100\17\0\2\100\4\0\12\102\11\0\1\100"+
    "\13\0\10\100\2\0\2\100\2\0\26\100\1\0\7\100"+
    "\1\0\2\100\1\0\5\100\3\0\1\100\36\0\2\100"+
    "\1\0\3\100\4\0\12\102\1\0\1\100\21\0\1\100"+
    "\1\0\6\100\3\0\3\100\1\0\4\100\3\0\2\100"+
    "\1\0\1\100\1\0\2\100\3\0\2\100\3\0\3\100"+
    "\3\0\14\100\26\0\1\100\25\0\12\102\25\0\10\100"+
    "\1\0\3\100\1\0\27\100\1\0\20\100\3\0\1\100"+
    "\32\0\3\100\5\0\2\100\4\0\12\102\20\0\1\100"+
    "\4\0\10\100\1\0\3\100\1\0\27\100\1\0\12\100"+
    "\1\0\5\100\3\0\1\100\40\0\1\100\1\0\2\100"+
    "\4\0\12\102\1\0\2\100\22\0\10\100\1\0\3\100"+
    "\1\0\51\100\2\0\1\100\20\0\1\100\5\0\3\100"+
    "\10\0\3\100\4\0\12\102\12\0\6\100\5\0\22\100"+
    "\3\0\30\100\1\0\11\100\1\0\1\100\2\0\7\100"+
    "\37\0\12\102\21\0\60\100\1\0\2\100\14\0\7\100"+
    "\11\0\12\102\47\0\2\100\1\0\1\100\1\0\5\100"+
    "\1\0\30\100\1\0\1\100\1\0\12\100\1\0\2\100"+
    "\11\0\1\100\2\0\5\100\1\0\1\100\11\0\12\102"+
    "\2\0\4\100\40\0\1\100\37\0\12\102\26\0\10\100"+
    "\1\0\44\100\33\0\5\100\163\0\53\100\24\0\1\100"+
    "\12\102\6\0\6\100\4\0\4\100\3\0\1\100\3\0"+
    "\2\100\7\0\3\100\4\0\15\100\14\0\1\100\1\0"+
    "\12\102\6\0\46\100\1\0\1\100\5\0\1\100\2\0"+
    "\53\100\1\0\115\100\1\0\4\100\2\0\7\100\1\0"+
    "\1\100\1\0\4\100\2\0\51\100\1\0\4\100\2\0"+
    "\41\100\1\0\4\100\2\0\7\100\1\0\1\100\1\0"+
    "\4\100\2\0\17\100\1\0\71\100\1\0\4\100\2\0"+
    "\103\100\45\0\20\100\20\0\126\100\2\0\6\100\3\0"+
    "\u016c\100\2\0\21\100\1\0\32\100\5\0\113\100\6\0"+
    "\10\100\7\0\15\100\1\0\4\100\16\0\22\100\16\0"+
    "\22\100\16\0\15\100\1\0\3\100\17\0\64\100\43\0"+
    "\1\100\4\0\1\100\3\0\12\102\46\0\12\102\6\0"+
    "\131\100\7\0\5\100\2\0\42\100\1\0\1\100\5\0"+
    "\106\100\12\0\37\100\47\0\12\102\36\100\2\0\5\100"+
    "\13\0\54\100\4\0\32\100\6\0\12\102\46\0\27\100"+
    "\11\0\65\100\53\0\12\102\6\0\12\102\15\0\1\100"+
    "\135\0\57\100\21\0\7\100\4\0\12\102\51\0\36\100"+
    "\15\0\2\100\12\102\54\100\32\0\44\100\34\0\12\102"+
    "\3\0\3\100\12\102\44\100\2\0\11\100\7\0\53\100"+
    "\2\0\3\100\51\0\4\100\1\0\6\100\1\0\2\100"+
    "\3\0\1\100\5\0\300\100\100\0\26\100\2\0\6\100"+
    "\2\0\46\100\2\0\6\100\2\0\10\100\1\0\1\100"+
    "\1\0\1\100\1\0\1\100\1\0\37\100\2\0\65\100"+
    "\1\0\7\100\1\0\1\100\3\0\3\100\1\0\7\100"+
    "\3\0\4\100\2\0\6\100\4\0\15\100\5\0\3\100"+
    "\1\0\7\100\164\0\1\100\15\0\1\100\20\0\15\100"+
    "\145\0\1\100\4\0\1\100\2\0\12\100\1\0\1\100"+
    "\3\0\5\100\6\0\1\100\1\0\1\100\1\0\1\100"+
    "\1\0\4\100\1\0\13\100\2\0\4\100\5\0\5\100"+
    "\4\0\1\100\64\0\2\100\u017b\0\57\100\1\0\57\100"+
    "\1\0\205\100\6\0\4\100\3\0\2\100\14\0\46\100"+
    "\1\0\1\100\5\0\1\100\2\0\70\100\7\0\1\100"+
    "\20\0\27\100\11\0\7\100\1\0\7\100\1\0\7\100"+
    "\1\0\7\100\1\0\7\100\1\0\7\100\1\0\7\100"+
    "\1\0\7\100\120\0\1\100\325\0\2\100\52\0\5\100"+
    "\5\0\2\100\4\0\126\100\6\0\3\100\1\0\132\100"+
    "\1\0\4\100\5\0\53\100\1\0\136\100\21\0\33\100"+
    "\65\0\306\100\112\0\360\100\20\0\215\100\103\0\56\100"+
    "\2\0\15\100\3\0\20\100\12\102\2\100\24\0\57\100"+
    "\20\0\37\100\2\0\106\100\61\0\11\100\2\0\147\100"+
    "\2\0\65\100\2\0\5\100\60\0\13\100\1\0\3\100"+
    "\1\0\4\100\1\0\27\100\35\0\64\100\16\0\62\100"+
    "\34\0\12\102\30\0\6\100\3\0\1\100\1\0\2\100"+
    "\1\0\12\102\34\100\12\0\27\100\31\0\35\100\7\0"+
    "\57\100\34\0\1\100\12\102\6\0\5\100\1\0\12\100"+
    "\12\102\5\100\1\0\51\100\27\0\3\100\1\0\10\100"+
    "\4\0\12\102\6\0\27\100\3\0\1\100\3\0\62\100"+
    "\1\0\1\100\3\0\2\100\2\0\5\100\2\0\1\100"+
    "\1\0\1\100\30\0\3\100\2\0\13\100\7\0\3\100"+
    "\14\0\6\100\2\0\6\100\2\0\6\100\11\0\7\100"+
    "\1\0\7\100\1\0\53\100\1\0\14\100\10\0\163\100"+
    "\15\0\12\102\6\0\244\100\14\0\27\100\4\0\61\100"+
    "\4\0\156\100\2\0\152\100\46\0\7\100\14\0\5\100"+
    "\5\0\1\100\1\0\12\100\1\0\15\100\1\0\5\100"+
    "\1\0\1\100\1\0\2\100\1\0\2\100\1\0\154\100"+
    "\41\0\153\100\22\0\100\100\2\0\66\100\50\0\14\100"+
    "\164\0\5\100\1\0\207\100\23\0\12\102\7\0\32\100"+
    "\6\0\32\100\13\0\131\100\3\0\6\100\2\0\6\100"+
    "\2\0\6\100\2\0\3\100\43\0\14\100\1\0\32\100"+
    "\1\0\23\100\1\0\2\100\1\0\17\100\2\0\16\100"+
    "\42\0\173\100\205\0\35\100\3\0\61\100\57\0\40\100"+
    "\15\0\24\100\1\0\10\100\6\0\46\100\12\0\36\100"+
    "\2\0\44\100\4\0\10\100\60\0\236\100\2\0\12\102"+
    "\6\0\44\100\4\0\44\100\4\0\50\100\10\0\64\100"+
    "\234\0\67\100\11\0\26\100\12\0\10\100\230\0\6\100"+
    "\2\0\1\100\1\0\54\100\1\0\2\100\3\0\1\100"+
    "\2\0\27\100\12\0\27\100\11\0\37\100\101\0\23\100"+
    "\1\0\2\100\12\0\26\100\12\0\32\100\106\0\70\100"+
    "\6\0\2\100\100\0\1\100\17\0\4\100\1\0\3\100"+
    "\1\0\35\100\52\0\35\100\3\0\35\100\43\0\10\100"+
    "\1\0\34\100\33\0\66\100\12\0\26\100\12\0\23\100"+
    "\15\0\22\100\156\0\111\100\67\0\63\100\15\0\63\100"+
    "\15\0\44\100\14\0\12\102\306\0\35\100\12\0\1\100"+
    "\10\0\26\100\232\0\27\100\14\0\65\100\56\0\12\102"+
    "\23\0\55\100\40\0\31\100\7\0\12\102\11\0\44\100"+
    "\17\0\12\102\4\0\1\100\13\0\43\100\3\0\1\100"+
    "\14\0\60\100\16\0\4\100\13\0\12\102\1\100\1\0"+
    "\1\100\43\0\22\100\1\0\31\100\124\0\7\100\1\0"+
    "\1\100\1\0\4\100\1\0\17\100\1\0\12\100\7\0"+
    "\57\100\21\0\12\102\13\0\10\100\2\0\2\100\2\0"+
    "\26\100\1\0\7\100\1\0\2\100\1\0\5\100\3\0"+
    "\1\100\22\0\1\100\14\0\5\100\236\0\65\100\22\0"+
    "\4\100\5\0\12\102\5\0\1\100\40\0\60\100\24\0"+
    "\2\100\1\0\1\100\10\0\12\102\246\0\57\100\51\0"+
    "\4\100\44\0\60\100\24\0\1\100\13\0\12\102\46\0"+
    "\53\100\15\0\1\100\7\0\12\102\66\0\33\100\25\0"+
    "\12\102\306\0\54\100\164\0\100\100\12\102\25\0\1\100"+
    "\240\0\10\100\2\0\47\100\20\0\1\100\1\0\1\100"+
    "\34\0\1\100\12\0\50\100\7\0\1\100\25\0\1\100"+
    "\13\0\56\100\23\0\1\100\42\0\71\100\7\0\11\100"+
    "\1\0\45\100\21\0\1\100\17\0\12\102\30\0\36\100"+
    "\160\0\7\100\1\0\2\100\1\0\46\100\25\0\1\100"+
    "\11\0\12\102\6\0\6\100\1\0\2\100\1\0\40\100"+
    "\16\0\1\100\7\0\12\102\u0136\0\23\100\15\0\232\100"+
    "\346\0\304\100\274\0\57\100\321\0\107\100\271\0\71\100"+
    "\7\0\37\100\1\0\12\102\146\0\36\100\22\0\60\100"+
    "\20\0\4\100\14\0\12\102\11\0\25\100\5\0\23\100"+
    "\260\0\100\100\200\0\113\100\5\0\1\100\102\0\15\100"+
    "\100\0\2\100\1\0\1\100\34\0\370\100\10\0\363\100"+
    "\15\0\37\100\61\0\3\100\21\0\4\100\10\0\u018c\100"+
    "\4\0\153\100\5\0\15\100\3\0\11\100\7\0\12\100"+
    "\146\0\125\100\1\0\107\100\1\0\2\100\2\0\1\100"+
    "\2\0\2\100\2\0\4\100\1\0\14\100\1\0\1\100"+
    "\1\0\7\100\1\0\101\100\1\0\4\100\2\0\10\100"+
    "\1\0\7\100\1\0\34\100\1\0\4\100\1\0\5\100"+
    "\1\0\1\100\3\0\7\100\1\0\u0154\100\2\0\31\100"+
    "\1\0\31\100\1\0\37\100\1\0\31\100\1\0\37\100"+
    "\1\0\31\100\1\0\37\100\1\0\31\100\1\0\37\100"+
    "\1\0\31\100\1\0\10\100\2\0\62\102\55\100\12\0"+
    "\7\100\2\0\12\102\4\0\1\100\u0171\0\54\100\4\0"+
    "\12\102\6\0\305\100\73\0\104\100\7\0\1\100\4\0"+
    "\12\102\246\0\4\100\1\0\33\100\1\0\2\100\1\0"+
    "\1\100\2\0\1\100\1\0\12\100\1\0\4\100\1\0"+
    "\1\100\1\0\1\100\6\0\1\100\4\0\1\100\1\0"+
    "\1\100\1\0\1\100\1\0\3\100\1\0\2\100\1\0"+
    "\1\100\2\0\1\100\1\0\1\100\1\0\1\100\1\0"+
    "\1\100\1\0\1\100\1\0\2\100\1\0\1\100\2\0"+
    "\4\100\1\0\7\100\1\0\4\100\1\0\4\100\1\0"+
    "\1\100\1\0\12\100\1\0\21\100\5\0\3\100\1\0"+
    "\5\100\1\0\21\100\104\0\327\100\51\0\65\100\13\0"+
    "\336\100\2\0\u0182\100\16\0\u0131\100\37\0\36\100\342\0";

  private static int [] zzUnpackcmap_blocks() {
    int [] result = new int[27648];
    int offset = 0;
    offset = zzUnpackcmap_blocks(ZZ_CMAP_BLOCKS_PACKED_0, offset, result);
    return result;
  }

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

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

  private static final String ZZ_ACTION_PACKED_0 =
    "\35\0\1\1\1\2\2\3\1\4\1\5\1\6\1\7"+
    "\1\10\1\11\1\12\1\13\1\14\2\10\5\15\1\16"+
    "\1\17\1\20\1\21\1\10\1\22\1\1\1\23\1\24"+
    "\12\10\1\25\1\26\1\27\1\6\1\4\1\30\1\11"+
    "\1\31\1\32\1\33\1\34\1\10\1\35\5\15\1\36"+
    "\1\17\1\20\1\21\1\37\1\10\1\1\1\40\1\26"+
    "\1\41\1\1\2\42\1\43\1\44\1\10\1\45\1\2"+
    "\2\46\1\45\1\1\2\45\1\47\1\4\1\11\1\50"+
    "\1\26\1\4\1\16\4\10\1\51\6\10\1\52\1\53"+
    "\2\52\1\1\1\54\1\10\1\55\2\10\1\56\1\57"+
    "\1\1\1\10\1\60\2\61\1\60\1\10\2\62\1\10"+
    "\1\62\1\10\1\62\1\10\2\63\3\1\1\64\1\65"+
    "\1\66\1\65\1\66\2\67\1\70\2\71\1\72\1\73"+
    "\2\74\1\75\1\76\1\72\1\76\1\75\1\76\5\77"+
    "\1\75\1\72\1\100\1\72\1\75\1\101\1\102\1\103"+
    "\1\46\12\10\3\0\1\104\1\0\1\105\1\104\1\106"+
    "\1\107\1\0\1\110\5\111\1\112\1\12\1\113\1\114"+
    "\1\10\2\15\1\115\1\116\1\117\1\120\1\121\1\122"+
    "\1\123\1\124\1\10\1\125\1\126\2\2\1\127\1\10"+
    "\1\130\3\10\1\131\2\10\1\132\1\133\6\10\1\134"+
    "\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144"+
    "\1\145\1\146\1\0\1\147\1\114\1\0\2\15\1\150"+
    "\1\151\1\152\1\153\1\154\1\123\2\0\1\10\1\155"+
    "\1\156\1\10\1\45\1\0\1\45\1\10\2\157\1\160"+
    "\1\10\1\0\6\10\4\0\2\10\1\0\1\10\1\2"+
    "\2\10\12\0\1\76\1\161\1\72\1\0\2\77\1\162"+
    "\1\72\1\0\1\10\1\130\3\10\1\131\2\10\1\132"+
    "\1\133\6\10\1\2\3\0\1\10\2\111\1\163\1\164"+
    "\1\165\1\166\1\167\1\0\10\10\1\170\5\10\1\164"+
    "\1\171\1\172\1\173\1\2\1\0\1\10\2\0\5\10"+
    "\1\55\1\10\2\60\1\0\1\10\2\63\2\65\1\73"+
    "\1\174\10\10\1\170\6\10\1\0\1\12\1\175\1\176"+
    "\1\177\1\200\1\201\1\202\1\203\2\10\1\204\1\205"+
    "\3\10\1\0\1\10\1\2\1\10\1\46\1\2\1\175"+
    "\1\176\1\177\1\200\1\201\1\202\2\10\1\204\1\205"+
    "\2\10\1\0\1\10\1\0\2\10\1\206\1\207\3\10"+
    "\1\206\1\207\1\203\1\10\1\210\1\10\1\210\2\10"+
    "\2\211";

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

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


  /**
   * Translates a state to a row index in the transition table
   */
  private static final int [] ZZ_ROWMAP = zzUnpackRowMap();

  private static final String ZZ_ROWMAP_PACKED_0 =
    "\0\0\0\103\0\206\0\311\0\u010c\0\u014f\0\u0192\0\u01d5"+
    "\0\u0218\0\u025b\0\u029e\0\u02e1\0\u0324\0\u0367\0\u03aa\0\u03ed"+
    "\0\u0430\0\u0473\0\u04b6\0\u04f9\0\u053c\0\u057f\0\u05c2\0\u0605"+
    "\0\u0648\0\u068b\0\u06ce\0\u0711\0\u0754\0\u0797\0\u07da\0\u0797"+
    "\0\u081d\0\u0860\0\u0797\0\u08a3\0\u08e6\0\u0929\0\u096c\0\u09af"+
    "\0\u0797\0\u0797\0\u09f2\0\u0a35\0\u0a78\0\u0abb\0\u0afe\0\u0b41"+
    "\0\u0b84\0\u0797\0\u0bc7\0\u0797\0\u0c0a\0\u0c4d\0\u0c90\0\u0cd3"+
    "\0\u0d16\0\u0797\0\u0d59\0\u0d9c\0\u0ddf\0\u0e22\0\u0e65\0\u0ea8"+
    "\0\u0eeb\0\u0f2e\0\u0f71\0\u0fb4\0\u0797\0\u0ff7\0\u0797\0\u103a"+
    "\0\u107d\0\u10c0\0\u1103\0\u1146\0\u1189\0\u0797\0\u11cc\0\u120f"+
    "\0\u1252\0\u1295\0\u12d8\0\u131b\0\u135e\0\u13a1\0\u0797\0\u13e4"+
    "\0\u1427\0\u146a\0\u0797\0\u14ad\0\u14f0\0\u1533\0\u1576\0\u0797"+
    "\0\u15b9\0\u0797\0\u15fc\0\u0797\0\u0797\0\u163f\0\u1682\0\u16c5"+
    "\0\u0797\0\u1708\0\u08e6\0\u174b\0\u0797\0\u178e\0\u0797\0\u17d1"+
    "\0\u1814\0\u0797\0\u1857\0\u189a\0\u18dd\0\u1920\0\u1963\0\u19a6"+
    "\0\u19e9\0\u0797\0\u1a2c\0\u1a6f\0\u1ab2\0\u1af5\0\u1b38\0\u1b7b"+
    "\0\u1bbe\0\u0797\0\u1c01\0\u0797\0\u1c44\0\u0797\0\u1c87\0\u1cca"+
    "\0\u1d0d\0\u08e6\0\u0797\0\u0797\0\u1d50\0\u1d93\0\u1dd6\0\u0797"+
    "\0\u1e19\0\u1e5c\0\u1e9f\0\u096c\0\u0797\0\u1ee2\0\u0c0a\0\u1f25"+
    "\0\u0ff7\0\u1f68\0\u1fab\0\u1fee\0\u2031\0\u2074\0\u20b7\0\u20fa"+
    "\0\u213d\0\u0797\0\u2180\0\u21c3\0\u0797\0\u2206\0\u2249\0\u0797"+
    "\0\u228c\0\u0797\0\u22cf\0\u0797\0\u2312\0\u0797\0\u2355\0\u08e6"+
    "\0\u2398\0\u23db\0\u241e\0\u2461\0\u24a4\0\u24e7\0\u252a\0\u256d"+
    "\0\u25b0\0\u25f3\0\u2636\0\u2679\0\u26bc\0\u0797\0\u0797\0\u26ff"+
    "\0\u2742\0\u2785\0\u27c8\0\u280b\0\u284e\0\u2891\0\u28d4\0\u2917"+
    "\0\u295a\0\u299d\0\u29e0\0\u2a23\0\u2a66\0\u2aa9\0\u0797\0\u2aec"+
    "\0\u0797\0\u2b2f\0\u0797\0\u0797\0\u2b72\0\u0797\0\u0797\0\u2bb5"+
    "\0\u2bf8\0\u2c3b\0\u2c7e\0\u2cc1\0\u0797\0\u0797\0\u2d04\0\u2d47"+
    "\0\u2d8a\0\u2dcd\0\u0797\0\u0797\0\u2e10\0\u0797\0\u0797\0\u0797"+
    "\0\u0797\0\u0797\0\u2e53\0\u0797\0\u0797\0\u2e96\0\u2ed9\0\u0797"+
    "\0\u2f1c\0\u2f5f\0\u2fa2\0\u2fe5\0\u3028\0\u0c4d\0\u306b\0\u30ae"+
    "\0\u0c4d\0\u0c4d\0\u30f1\0\u3134\0\u3177\0\u31ba\0\u31fd\0\u3240"+
    "\0\u0797\0\u0797\0\u3283\0\u0797\0\u0797\0\u0797\0\u0797\0\u0797"+
    "\0\u0797\0\u0797\0\u0797\0\u14f0\0\u0797\0\u32c6\0\u3309\0\u334c"+
    "\0\u338f\0\u33d2\0\u0797\0\u0797\0\u0797\0\u0797\0\u3415\0\u3458"+
    "\0\u15b9\0\u349b\0\u0797\0\u0797\0\u34de\0\u3521\0\u174b\0\u3564"+
    "\0\u0797\0\u0797\0\u35a7\0\u0c4d\0\u35ea\0\u362d\0\u3670\0\u36b3"+
    "\0\u36f6\0\u3739\0\u377c\0\u37bf\0\u1c44\0\u1d50\0\u3802\0\u3845"+
    "\0\u3888\0\u38cb\0\u390e\0\u3951\0\u3994\0\u39d7\0\u3a1a\0\u20b7"+
    "\0\u3a5d\0\u3aa0\0\u3ae3\0\u3b26\0\u3b69\0\u21c3\0\u3bac\0\u3bef"+
    "\0\u3c32\0\u0797\0\u3c75\0\u3cb8\0\u2679\0\u3cfb\0\u3d3e\0\u0797"+
    "\0\u3d81\0\u2742\0\u3dc4\0\u3e07\0\u3e4a\0\u3e8d\0\u3ed0\0\u14ad"+
    "\0\u3f13\0\u3f56\0\u14ad\0\u14ad\0\u3f99\0\u3fdc\0\u401f\0\u4062"+
    "\0\u40a5\0\u40e8\0\u412b\0\u416e\0\u41b1\0\u41f4\0\u4237\0\u427a"+
    "\0\u42bd\0\u0797\0\u2d47\0\u0797\0\u0797\0\u0797\0\u0cd3\0\u4300"+
    "\0\u4343\0\u4386\0\u43c9\0\u440c\0\u444f\0\u4492\0\u44d5\0\u0c4d"+
    "\0\u4518\0\u455b\0\u459e\0\u45e1\0\u4624\0\u3309\0\u0797\0\u0797"+
    "\0\u14ad\0\u4667\0\u46aa\0\u46ed\0\u4730\0\u4773\0\u47b6\0\u47f9"+
    "\0\u483c\0\u487f\0\u48c2\0\u4905\0\u4948\0\u498b\0\u49ce\0\u4a11"+
    "\0\u4a54\0\u4a97\0\u0797\0\u4ada\0\u4b1d\0\u4b60\0\u3cb8\0\u4ba3"+
    "\0\u4be6\0\u4c29\0\u4c6c\0\u4caf\0\u4cf2\0\u4d35\0\u4d78\0\u14ad"+
    "\0\u4dbb\0\u4dfe\0\u4e41\0\u4e84\0\u4ec7\0\u4f0a\0\u4f4d\0\u2aec"+
    "\0\u0c4d\0\u0c4d\0\u0c4d\0\u0c4d\0\u0c4d\0\u0c4d\0\u4f90\0\u4fd3"+
    "\0\u5016\0\u0c4d\0\u0c4d\0\u5059\0\u509c\0\u50df\0\u5122\0\u5165"+
    "\0\u51a8\0\u51eb\0\u19e9\0\u522e\0\u14ad\0\u14ad\0\u14ad\0\u14ad"+
    "\0\u14ad\0\u14ad\0\u5271\0\u52b4\0\u14ad\0\u14ad\0\u52f7\0\u533a"+
    "\0\u0860\0\u537d\0\u53c0\0\u5403\0\u5446\0\u0c4d\0\u0c4d\0\u5489"+
    "\0\u54cc\0\u550f\0\u14ad\0\u14ad\0\u5552\0\u5595\0\u0c4d\0\u55d8"+
    "\0\u14ad\0\u561b\0\u565e\0\u0c4d\0\u14ad";

  private static int [] zzUnpackRowMap() {
    int [] result = new int[469];
    int offset = 0;
    offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
    return result;
  }

  private static int zzUnpackRowMap(String packed, int offset, int [] result) {
    int i = 0;  /* index in packed string  */
    int j = offset;  /* index in unpacked array */
    int l = packed.length() - 1;
    while (i < l) {
      int high = packed.charAt(i++) << 16;
      result[j++] = high | packed.charAt(i++);
    }
    return j;
  }

  /**
   * The transition table of the DFA
   */
  private static final int [] ZZ_TRANS = zzUnpacktrans();

  private static final String ZZ_TRANS_PACKED_0 =
    "\1\36\1\37\1\40\1\37\1\41\1\37\1\42\1\43"+
    "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\4\46\1\55\1\56\2\57\1\60\2\61\1\46"+
    "\1\62\1\63\1\64\1\65\2\53\3\66\1\67\1\70"+
    "\1\71\1\46\1\66\1\72\1\66\1\73\1\74\1\75"+
    "\1\76\1\66\1\77\1\100\3\66\1\101\1\102\1\103"+
    "\1\66\1\104\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\36\1\37\1\40\1\37\1\41\1\37\1\42\1\43"+
    "\1\110\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\4\46\1\55\1\56\2\57\1\60\2\61\1\46"+
    "\1\62\1\63\1\64\1\65\2\53\3\66\1\67\1\70"+
    "\1\71\1\46\1\66\1\72\1\66\1\73\1\74\1\75"+
    "\1\76\1\66\1\77\1\100\3\66\1\101\1\102\1\103"+
    "\1\66\1\104\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\36\1\37\1\40\1\37\1\41\1\37\1\111\1\43"+
    "\1\44\1\45\1\112\1\113\1\50\1\51\1\52\1\114"+
    "\1\115\1\116\1\117\1\120\1\121\1\122\1\123\2\124"+
    "\1\125\2\126\1\127\1\62\1\130\1\131\1\132\1\133"+
    "\1\120\3\134\1\67\1\135\1\71\1\136\1\134\1\72"+
    "\20\134\1\105\1\137\1\107\1\140\1\141\3\36\1\37"+
    "\1\40\1\37\1\41\1\37\1\111\1\43\1\110\1\45"+
    "\1\112\1\113\1\50\1\51\1\52\1\114\1\115\1\116"+
    "\1\117\1\120\1\121\1\122\1\123\2\124\1\125\2\126"+
    "\1\127\1\62\1\130\1\131\1\132\1\133\1\120\3\134"+
    "\1\67\1\135\1\71\1\136\1\134\1\72\20\134\1\105"+
    "\1\137\1\107\1\140\1\141\3\36\1\37\1\142\1\37"+
    "\1\143\1\37\1\111\1\144\1\44\1\45\1\112\1\113"+
    "\1\50\1\51\1\52\1\114\1\115\1\116\1\117\1\120"+
    "\1\121\1\122\1\123\2\124\1\125\2\126\1\127\1\145"+
    "\1\130\1\131\1\132\1\133\1\120\3\134\1\67\1\135"+
    "\1\71\1\136\1\134\1\72\7\134\1\146\10\134\1\105"+
    "\1\137\1\107\1\140\1\141\3\36\1\37\1\142\1\37"+
    "\1\143\1\37\1\111\1\144\1\110\1\45\1\112\1\113"+
    "\1\50\1\51\1\52\1\114\1\115\1\116\1\117\1\120"+
    "\1\121\1\122\1\123\2\124\1\125\2\126\1\127\1\145"+
    "\1\130\1\131\1\132\1\133\1\120\3\134\1\67\1\135"+
    "\1\71\1\136\1\134\1\72\7\134\1\146\10\134\1\105"+
    "\1\137\1\107\1\140\1\141\2\36\1\147\1\150\1\151"+
    "\1\150\1\152\1\37\1\147\1\43\1\147\1\153\2\147"+
    "\1\154\1\155\1\151\16\147\1\151\11\147\1\156\3\147"+
    "\1\157\21\147\1\151\5\147\1\36\1\37\1\142\1\37"+
    "\1\143\1\37\1\160\1\43\1\44\1\45\1\46\1\161"+
    "\1\50\1\51\1\151\1\53\1\54\4\46\1\55\1\56"+
    "\2\57\1\60\2\61\1\46\1\145\1\63\1\64\1\65"+
    "\2\53\3\66\1\67\1\70\1\71\1\46\1\66\1\162"+
    "\20\66\1\105\1\163\1\107\1\46\1\66\2\46\1\36"+
    "\1\37\1\142\1\37\1\143\1\37\1\160\1\43\1\110"+
    "\1\45\1\46\1\161\1\50\1\51\1\151\1\53\1\54"+
    "\4\46\1\55\1\56\2\57\1\60\2\61\1\46\1\145"+
    "\1\63\1\64\1\65\2\53\3\66\1\67\1\70\1\71"+
    "\1\46\1\66\1\162\20\66\1\105\1\163\1\107\1\46"+
    "\1\66\2\46\1\36\1\37\1\40\1\37\1\41\1\37"+
    "\1\164\1\43\1\44\1\45\1\46\1\47\1\50\1\51"+
    "\1\52\1\53\1\54\4\46\1\55\1\56\2\57\1\60"+
    "\2\61\1\46\1\62\1\63\1\131\1\65\2\53\3\66"+
    "\1\67\1\70\1\71\1\46\1\66\1\72\20\66\1\105"+
    "\1\106\1\107\1\46\1\66\2\46\1\36\1\37\1\40"+
    "\1\37\1\41\1\37\1\164\1\43\1\110\1\45\1\46"+
    "\1\47\1\50\1\51\1\52\1\53\1\54\4\46\1\55"+
    "\1\56\2\57\1\60\2\61\1\46\1\62\1\63\1\131"+
    "\1\65\2\53\3\66\1\67\1\70\1\71\1\46\1\66"+
    "\1\72\20\66\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\36\1\37\1\40\1\37\1\41\1\37\1\42\1\43"+
    "\1\44\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\4\46\1\55\1\56\2\57\1\60\2\61\1\46"+
    "\1\165\1\63\1\64\1\65\2\53\3\66\1\67\1\70"+
    "\1\71\1\46\1\66\1\72\1\66\1\73\1\74\1\75"+
    "\1\76\1\66\1\166\1\100\3\66\1\101\1\102\1\103"+
    "\1\66\1\104\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\36\1\37\1\40\1\37\1\41\1\37\1\42\1\43"+
    "\1\110\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\4\46\1\55\1\56\2\57\1\60\2\61\1\46"+
    "\1\165\1\63\1\64\1\65\2\53\3\66\1\67\1\70"+
    "\1\71\1\46\1\66\1\72\1\66\1\73\1\74\1\75"+
    "\1\76\1\66\1\166\1\100\3\66\1\101\1\102\1\103"+
    "\1\66\1\104\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\167\1\37\1\40\1\37\1\41\1\37\1\170\1\43"+
    "\1\44\1\45\1\171\1\167\1\50\1\51\1\172\2\173"+
    "\14\171\1\167\1\174\1\167\1\175\2\173\3\171\1\167"+
    "\1\176\1\167\2\171\1\167\3\171\1\177\1\200\13\171"+
    "\1\167\1\106\1\167\4\171\1\167\1\37\1\40\1\37"+
    "\1\41\1\37\1\170\1\43\1\110\1\45\1\171\1\167"+
    "\1\50\1\51\1\172\2\173\14\171\1\167\1\174\1\167"+
    "\1\175\2\173\3\171\1\167\1\176\1\167\2\171\1\167"+
    "\3\171\1\177\1\200\13\171\1\167\1\106\1\167\4\171"+
    "\7\201\1\202\1\201\1\203\3\201\1\204\31\201\1\205"+
    "\3\201\1\206\27\201\1\207\1\210\1\36\1\211\1\36"+
    "\1\210\1\207\1\43\1\207\1\212\2\207\1\50\1\213"+
    "\1\214\30\207\1\215\3\207\1\206\27\207\1\216\1\217"+
    "\1\220\1\217\1\221\1\222\1\216\1\43\1\223\1\45"+
    "\1\216\1\224\1\50\2\225\16\216\1\225\1\226\1\216"+
    "\1\227\6\216\1\230\3\216\1\225\21\216\1\231\6\216"+
    "\1\217\1\220\1\217\1\221\1\222\1\216\1\43\1\232"+
    "\1\45\1\216\1\224\1\50\2\225\16\216\1\225\1\226"+
    "\1\216\1\227\6\216\1\230\3\216\1\225\21\216\1\231"+
    "\5\216\1\233\1\37\1\142\1\234\1\143\1\37\1\233"+
    "\1\235\3\233\1\36\1\236\2\36\16\233\1\36\11\233"+
    "\1\237\25\233\1\36\5\233\1\240\1\241\1\242\1\243"+
    "\1\242\1\241\1\240\1\242\3\240\4\242\16\240\1\242"+
    "\11\240\1\244\25\240\1\242\5\240\1\36\1\37\1\245"+
    "\1\37\1\246\1\37\1\42\1\43\1\44\1\45\1\46"+
    "\1\47\1\50\1\51\1\52\1\53\1\54\4\46\1\55"+
    "\1\56\2\57\1\60\2\61\1\46\1\62\1\63\1\64"+
    "\1\65\2\53\3\66\1\67\1\70\1\71\1\46\1\66"+
    "\1\72\20\66\1\105\1\106\1\107\1\46\1\66\2\46"+
    "\1\36\1\37\1\245\1\37\1\246\1\37\1\42\1\43"+
    "\1\110\1\45\1\46\1\47\1\50\1\51\1\52\1\53"+
    "\1\54\4\46\1\55\1\56\2\57\1\60\2\61\1\46"+
    "\1\62\1\63\1\64\1\65\2\53\3\66\1\67\1\70"+
    "\1\71\1\46\1\66\1\72\20\66\1\105\1\106\1\107"+
    "\1\46\1\66\2\46\2\247\1\250\1\247\1\251\76\247"+
    "\1\252\1\253\1\254\1\253\1\255\1\253\1\256\1\43"+
    "\1\257\1\260\1\261\1\252\1\50\2\252\2\256\1\262"+
    "\1\256\1\252\1\263\1\264\1\265\2\266\1\267\2\270"+
    "\1\271\2\252\1\256\1\252\2\256\3\272\1\273\1\274"+
    "\1\252\1\275\1\272\1\206\20\272\1\276\1\252\1\277"+
    "\5\252\1\253\1\254\1\253\1\255\1\253\1\252\1\43"+
    "\1\252\1\260\2\252\1\50\10\252\1\264\1\265\2\266"+
    "\1\267\2\270\7\252\3\272\1\273\1\274\2\252\1\272"+
    "\1\206\20\272\1\276\1\252\1\277\4\252\7\300\1\151"+
    "\1\300\1\151\12\300\1\151\22\300\1\301\3\300\1\151"+
    "\22\300\1\151\4\300\1\36\1\37\1\40\1\37\1\41"+
    "\1\37\1\111\1\43\1\44\1\45\1\112\1\113\1\50"+
    "\1\51\1\52\1\114\1\115\1\116\1\117\1\120\1\121"+
    "\1\122\1\123\2\124\1\125\2\126\1\127\1\62\1\130"+
    "\1\131\1\132\1\133\1\120\3\134\1\67\1\135\1\71"+
    "\1\136\1\134\1\72\1\134\1\302\1\303\1\304\1\305"+
    "\1\134\1\306\1\307\3\134\1\310\1\311\1\312\1\134"+
    "\1\313\1\105\1\137\1\107\1\140\1\141\3\36\1\37"+
    "\1\40\1\37\1\41\1\37\1\111\1\43\1\110\1\45"+
    "\1\112\1\113\1\50\1\51\1\52\1\114\1\115\1\116"+
    "\1\117\1\120\1\121\1\122\1\123\2\124\1\125\2\126"+
    "\1\127\1\62\1\130\1\131\1\132\1\133\1\120\3\134"+
    "\1\67\1\135\1\71\1\136\1\134\1\72\1\134\1\302"+
    "\1\303\1\304\1\305\1\134\1\306\1\307\3\134\1\310"+
    "\1\311\1\312\1\134\1\313\1\105\1\137\1\107\1\140"+
    "\1\141\2\36\104\0\1\37\1\0\1\37\1\0\1\37"+
    "\41\0\1\314\35\0\1\40\115\0\1\315\30\0\1\316"+
    "\34\0\2\44\1\0\1\44\1\0\76\44\6\0\1\317"+
    "\1\0\2\317\2\0\1\320\1\321\1\0\1\317\2\0"+
    "\1\317\2\0\7\317\5\0\2\317\3\322\1\323\3\0"+
    "\1\322\1\0\20\322\1\324\3\0\1\322\10\0\1\46"+
    "\1\0\1\46\1\0\1\46\4\0\16\46\4\0\5\46"+
    "\1\0\1\325\1\0\2\46\1\0\20\46\3\0\4\46"+
    "\13\0\1\326\6\0\1\327\2\0\1\327\1\330\2\331"+
    "\1\332\2\333\4\0\1\334\42\0\14\50\1\335\66\50"+
    "\6\0\1\46\1\0\1\46\1\0\1\46\2\0\1\315"+
    "\1\0\16\46\4\0\5\46\1\316\1\325\1\0\2\46"+
    "\1\0\20\46\3\0\4\46\6\0\1\46\1\0\1\46"+
    "\1\0\1\46\2\0\1\315\1\0\16\46\2\0\1\336"+
    "\1\0\5\46\1\316\1\325\1\0\2\46\1\0\20\46"+
    "\3\0\4\46\6\0\1\46\1\0\1\46\1\0\1\46"+
    "\4\0\6\46\6\337\2\46\4\0\4\46\1\340\1\0"+
    "\1\325\1\0\2\46\1\0\20\46\3\0\4\46\6\0"+
    "\1\46\1\0\1\46\1\0\1\46\4\0\6\46\7\61"+
    "\1\46\4\0\5\46\1\0\1\325\1\0\2\46\1\0"+
    "\20\46\3\0\4\46\6\0\1\46\1\0\1\341\1\0"+
    "\1\46\4\0\6\46\7\61\1\46\4\0\5\46\1\0"+
    "\1\325\1\0\2\46\1\0\20\46\3\0\4\46\6\0"+
    "\1\46\1\0\1\341\1\0\1\46\4\0\6\46\3\61"+
    "\4\342\1\46\4\0\5\46\1\0\1\325\1\0\2\46"+
    "\1\0\20\46\3\0\4\46\6\0\1\46\1\0\1\341"+
    "\1\0\1\46\4\0\6\46\7\342\1\46\4\0\5\46"+
    "\1\0\1\325\1\0\2\46\1\0\20\46\3\0\4\46"+
    "\13\0\1\343\1\0\1\344\20\0\1\345\1\0\1\346"+
    "\55\0\1\347\1\0\1\350\22\0\1\351\34\0\1\352"+
    "\13\0\1\46\1\0\1\46\1\0\1\46\4\0\1\46"+
    "\1\353\4\46\7\66\1\46\2\0\1\354\1\0\2\46"+
    "\3\66\1\0\1\325\1\0\1\46\1\66\1\0\20\66"+
    "\3\0\1\46\1\66\2\46\46\0\1\355\34\0\2\46"+
    "\1\356\1\46\1\357\76\46\50\0\1\360\40\0\1\46"+
    "\1\0\1\46\1\0\1\46\4\0\1\46\1\353\4\46"+
    "\7\66\1\46\2\0\1\354\1\0\2\46\3\66\1\0"+
    "\1\325\1\0\1\46\1\66\1\0\1\361\17\66\3\0"+
    "\1\46\1\66\2\46\6\0\1\46\1\0\1\46\1\0"+
    "\1\46\4\0\1\46\1\353\4\46\7\66\1\46\2\0"+
    "\1\354\1\0\2\46\3\66\1\0\1\325\1\0\1\46"+
    "\1\66\1\0\11\66\1\362\6\66\3\0\1\46\1\66"+
    "\2\46\6\0\1\46\1\0\1\46\1\0\1\46\4\0"+
    "\1\46\1\353\4\46\7\66\1\46\2\0\1\354\1\0"+
    "\2\46\3\66\1\0\1\325\1\0\1\46\1\66\1\0"+
    "\7\66\1\363\3\66\1\364\2\66\1\365\1\66\3\0"+
    "\1\46\1\66\2\46\6\0\1\46\1\0\1\46\1\0"+
    "\1\46\4\0\1\46\1\353\4\46\7\66\1\46\2\0"+
    "\1\354\1\0\2\46\3\66\1\0\1\325\1\0\1\46"+
    "\1\66\1\0\6\66\1\366\2\66\1\367\3\66\1\370"+
    "\2\66\3\0\1\46\1\66\2\46\6\0\1\46\1\0"+
    "\1\46\1\0\1\46\4\0\1\46\1\353\4\46\7\66"+
    "\1\46\2\0\1\354\1\0\2\46\3\66\1\0\1\325"+
    "\1\0\1\46\1\66\1\0\4\66\1\371\3\66\1\372"+
    "\7\66\3\0\1\46\1\66\2\46\6\0\1\46\1\0"+
    "\1\46\1\0\1\46\4\0\1\46\1\353\4\46\7\66"+
    "\1\46\2\0\1\354\1\0\2\46\3\66\1\0\1\325"+
    "\1\0\1\46\1\66\1\0\3\66\1\373\14\66\3\0"+
    "\1\46\1\66\2\46\6\0\1\46\1\0\1\46\1\0"+
    "\1\46\4\0\1\46\1\353\4\46\7\66\1\46\2\0"+
    "\1\354\1\0\2\46\3\66\1\0\1\325\1\0\1\46"+
    "\1\66\1\0\3\66\1\374\14\66\3\0\1\46\1\66"+
    "\2\46\6\0\1\46\1\0\1\46\1\0\1\46\4\0"+
    "\1\46\1\353\4\46\7\66\1\46\2\0\1\354\1\0"+
    "\2\46\3\66\1\0\1\325\1\0\1\46\1\66\1\0"+
    "\3\66\1\375\1\66\1\376\12\66\3\0\1\46\1\66"+
    "\2\46\6\0\1\46\1\0\1\46\1\0\1\46\4\0"+
    "\1\46\1\353\4\46\7\66\1\46\2\0\1\354\1\0"+
    "\2\46\3\66\1\0\1\325\1\0\1\46\1\66\1\0"+
    "\10\66\1\377\7\66\3\0\1\46\1\66\2\46\6\0"+
    "\1\46\1\0\1\46\1\0\1\46\4\0\1\46\1\353"+
    "\4\46\7\66\1\46\2\0\1\354\1\0\2\46\3\66"+
    "\1\0\1\325\1\0\1\46\1\66\1\0\5\66\1\u0100"+
    "\12\66\3\0\1\46\1\66\2\46\13\0\1\u0101\61\0"+
    "\1\u0102\5\0\2\44\1\0\1\44\1\0\1\44\1\u0103"+
    "\74\44\37\0\1\u0104\102\0\1\u0105\56\0\1\326\6\0"+
    "\1\327\2\0\1\327\1\330\2\331\1\332\2\333\3\0"+
    "\1\u0106\1\334\61\0\1\u0107\17\0\1\u0108\63\0\1\u0109"+
