You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by mh...@apache.org on 2013/09/24 20:33:14 UTC

[38/50] [abbrv] Implement Standard and Classic Analyzers

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/7a4b442f/src/contrib/Analyzers/Standard/Std34/StandardTokenizerImpl34.cs
----------------------------------------------------------------------
diff --git a/src/contrib/Analyzers/Standard/Std34/StandardTokenizerImpl34.cs b/src/contrib/Analyzers/Standard/Std34/StandardTokenizerImpl34.cs
new file mode 100644
index 0000000..bdaf2aa
--- /dev/null
+++ b/src/contrib/Analyzers/Standard/Std34/StandardTokenizerImpl34.cs
@@ -0,0 +1,1134 @@
+using Lucene.Net.Analysis.Tokenattributes;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+
+namespace Lucene.Net.Analysis.Standard.Std34
+{
+    public sealed class StandardTokenizerImpl34 : IStandardTokenizerInterface
+    {
+        /** This character denotes the end of file */
+        public const int YYEOF = -1;
+
+        /** initial size of the lookahead buffer */
+        private const int ZZ_BUFFERSIZE = 4096;
+
+        /** lexical states */
+        public const int YYINITIAL = 0;
+
+        /**
+         * 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 readonly int[] ZZ_LEXSTATE = { 
+     0, 0
+  };
+
+        /** 
+         * Translates characters to character classes
+         */
+        private const String ZZ_CMAP_PACKED =
+          "\u0027\0\u0001\u0060\u0004\0\u0001\u005f\u0001\0\u0001\u0060\u0001\0\u000a\u005c\u0001\u005e\u0001\u005f" +
+          "\u0005\0\u001a\u005a\u0004\0\u0001\u0061\u0001\0\u001a\u005a\u002f\0\u0001\u005a\u0002\0\u0001\u005b" +
+          "\u0007\0\u0001\u005a\u0001\0\u0001\u005e\u0002\0\u0001\u005a\u0005\0\u0017\u005a\u0001\0\u001f\u005a" +
+          "\u0001\0\u01ca\u005a\u0004\0\u000c\u005a\u000e\0\u0005\u005a\u0007\0\u0001\u005a\u0001\0\u0001\u005a" +
+          "\u0011\0\u0070\u005b\u0005\u005a\u0001\0\u0002\u005a\u0002\0\u0004\u005a\u0001\u005f\u0007\0\u0001\u005a" +
+          "\u0001\u005e\u0003\u005a\u0001\0\u0001\u005a\u0001\0\u0014\u005a\u0001\0\u0053\u005a\u0001\0\u008b\u005a" +
+          "\u0001\0\u0007\u005b\u009e\u005a\u0009\0\u0026\u005a\u0002\0\u0001\u005a\u0007\0\u0027\u005a\u0001\0" +
+          "\u0001\u005f\u0007\0\u002d\u005b\u0001\0\u0001\u005b\u0001\0\u0002\u005b\u0001\0\u0002\u005b\u0001\0" +
+          "\u0001\u005b\u0008\0\u001b\u005a\u0005\0\u0004\u005a\u0001\u005e\u000b\0\u0004\u005b\u0008\0\u0002\u005f" +
+          "\u0002\0\u000b\u005b\u0005\0\u002b\u005a\u0015\u005b\u000a\u005c\u0001\0\u0001\u005c\u0001\u005f\u0001\0" +
+          "\u0002\u005a\u0001\u005b\u0063\u005a\u0001\0\u0001\u005a\u0007\u005b\u0001\u005b\u0001\0\u0006\u005b\u0002\u005a" +
+          "\u0002\u005b\u0001\0\u0004\u005b\u0002\u005a\u000a\u005c\u0003\u005a\u0002\0\u0001\u005a\u000f\0\u0001\u005b" +
+          "\u0001\u005a\u0001\u005b\u001e\u005a\u001b\u005b\u0002\0\u0059\u005a\u000b\u005b\u0001\u005a\u000e\0\u000a\u005c" +
+          "\u0021\u005a\u0009\u005b\u0002\u005a\u0002\0\u0001\u005f\u0001\0\u0001\u005a\u0005\0\u0016\u005a\u0004\u005b" +
+          "\u0001\u005a\u0009\u005b\u0001\u005a\u0003\u005b\u0001\u005a\u0005\u005b\u0012\0\u0019\u005a\u0003\u005b\u00a4\0" +
+          "\u0004\u005b\u0036\u005a\u0003\u005b\u0001\u005a\u0012\u005b\u0001\u005a\u0007\u005b\u000a\u005a\u0002\u005b\u0002\0" +
+          "\u000a\u005c\u0001\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0003\u005b\u0001\0\u0008\u005a\u0002\0" +
+          "\u0002\u005a\u0002\0\u0016\u005a\u0001\0\u0007\u005a\u0001\0\u0001\u005a\u0003\0\u0004\u005a\u0002\0" +
+          "\u0001\u005b\u0001\u005a\u0007\u005b\u0002\0\u0002\u005b\u0002\0\u0003\u005b\u0001\u005a\u0008\0\u0001\u005b" +
+          "\u0004\0\u0002\u005a\u0001\0\u0003\u005a\u0002\u005b\u0002\0\u000a\u005c\u0002\u005a\u000f\0\u0003\u005b" +
+          "\u0001\0\u0006\u005a\u0004\0\u0002\u005a\u0002\0\u0016\u005a\u0001\0\u0007\u005a\u0001\0\u0002\u005a" +
+          "\u0001\0\u0002\u005a\u0001\0\u0002\u005a\u0002\0\u0001\u005b\u0001\0\u0005\u005b\u0004\0\u0002\u005b" +
+          "\u0002\0\u0003\u005b\u0003\0\u0001\u005b\u0007\0\u0004\u005a\u0001\0\u0001\u005a\u0007\0\u000a\u005c" +
+          "\u0002\u005b\u0003\u005a\u0001\u005b\u000b\0\u0003\u005b\u0001\0\u0009\u005a\u0001\0\u0003\u005a\u0001\0" +
+          "\u0016\u005a\u0001\0\u0007\u005a\u0001\0\u0002\u005a\u0001\0\u0005\u005a\u0002\0\u0001\u005b\u0001\u005a" +
+          "\u0008\u005b\u0001\0\u0003\u005b\u0001\0\u0003\u005b\u0002\0\u0001\u005a\u000f\0\u0002\u005a\u0002\u005b" +
+          "\u0002\0\u000a\u005c\u0011\0\u0003\u005b\u0001\0\u0008\u005a\u0002\0\u0002\u005a\u0002\0\u0016\u005a" +
+          "\u0001\0\u0007\u005a\u0001\0\u0002\u005a\u0001\0\u0005\u005a\u0002\0\u0001\u005b\u0001\u005a\u0007\u005b" +
+          "\u0002\0\u0002\u005b\u0002\0\u0003\u005b\u0008\0\u0002\u005b\u0004\0\u0002\u005a\u0001\0\u0003\u005a" +
+          "\u0002\u005b\u0002\0\u000a\u005c\u0001\0\u0001\u005a\u0010\0\u0001\u005b\u0001\u005a\u0001\0\u0006\u005a" +
+          "\u0003\0\u0003\u005a\u0001\0\u0004\u005a\u0003\0\u0002\u005a\u0001\0\u0001\u005a\u0001\0\u0002\u005a" +
+          "\u0003\0\u0002\u005a\u0003\0\u0003\u005a\u0003\0\u000c\u005a\u0004\0\u0005\u005b\u0003\0\u0003\u005b" +
+          "\u0001\0\u0004\u005b\u0002\0\u0001\u005a\u0006\0\u0001\u005b\u000e\0\u000a\u005c\u0011\0\u0003\u005b" +
+          "\u0001\0\u0008\u005a\u0001\0\u0003\u005a\u0001\0\u0017\u005a\u0001\0\u000a\u005a\u0001\0\u0005\u005a" +
+          "\u0003\0\u0001\u005a\u0007\u005b\u0001\0\u0003\u005b\u0001\0\u0004\u005b\u0007\0\u0002\u005b\u0001\0" +
+          "\u0002\u005a\u0006\0\u0002\u005a\u0002\u005b\u0002\0\u000a\u005c\u0012\0\u0002\u005b\u0001\0\u0008\u005a" +
+          "\u0001\0\u0003\u005a\u0001\0\u0017\u005a\u0001\0\u000a\u005a\u0001\0\u0005\u005a\u0002\0\u0001\u005b" +
+          "\u0001\u005a\u0007\u005b\u0001\0\u0003\u005b\u0001\0\u0004\u005b\u0007\0\u0002\u005b\u0007\0\u0001\u005a" +
+          "\u0001\0\u0002\u005a\u0002\u005b\u0002\0\u000a\u005c\u0001\0\u0002\u005a\u000f\0\u0002\u005b\u0001\0" +
+          "\u0008\u005a\u0001\0\u0003\u005a\u0001\0\u0029\u005a\u0002\0\u0001\u005a\u0007\u005b\u0001\0\u0003\u005b" +
+          "\u0001\0\u0004\u005b\u0001\u005a\u0008\0\u0001\u005b\u0008\0\u0002\u005a\u0002\u005b\u0002\0\u000a\u005c" +
+          "\u000a\0\u0006\u005a\u0002\0\u0002\u005b\u0001\0\u0012\u005a\u0003\0\u0018\u005a\u0001\0\u0009\u005a" +
+          "\u0001\0\u0001\u005a\u0002\0\u0007\u005a\u0003\0\u0001\u005b\u0004\0\u0006\u005b\u0001\0\u0001\u005b" +
+          "\u0001\0\u0008\u005b\u0012\0\u0002\u005b\u000d\0\u0030\u0062\u0001\u0063\u0002\u0062\u0007\u0063\u0005\0" +
+          "\u0007\u0062\u0008\u0063\u0001\0\u000a\u005c\u0027\0\u0002\u0062\u0001\0\u0001\u0062\u0002\0\u0002\u0062" +
+          "\u0001\0\u0001\u0062\u0002\0\u0001\u0062\u0006\0\u0004\u0062\u0001\0\u0007\u0062\u0001\0\u0003\u0062" +
+          "\u0001\0\u0001\u0062\u0001\0\u0001\u0062\u0002\0\u0002\u0062\u0001\0\u0004\u0062\u0001\u0063\u0002\u0062" +
+          "\u0006\u0063\u0001\0\u0002\u0063\u0001\u0062\u0002\0\u0005\u0062\u0001\0\u0001\u0062\u0001\0\u0006\u0063" +
+          "\u0002\0\u000a\u005c\u0002\0\u0002\u0062\u0022\0\u0001\u005a\u0017\0\u0002\u005b\u0006\0\u000a\u005c" +
+          "\u000b\0\u0001\u005b\u0001\0\u0001\u005b\u0001\0\u0001\u005b\u0004\0\u0002\u005b\u0008\u005a\u0001\0" +
+          "\u0024\u005a\u0004\0\u0014\u005b\u0001\0\u0002\u005b\u0005\u005a\u000b\u005b\u0001\0\u0024\u005b\u0009\0" +
+          "\u0001\u005b\u0039\0\u002b\u0062\u0014\u0063\u0001\u0062\u000a\u005c\u0006\0\u0006\u0062\u0004\u0063\u0004\u0062" +
+          "\u0003\u0063\u0001\u0062\u0003\u0063\u0002\u0062\u0007\u0063\u0003\u0062\u0004\u0063\u000d\u0062\u000c\u0063\u0001\u0062" +
+          "\u0001\u0063\u000a\u005c\u0004\u0063\u0002\u0062\u0026\u005a\u000a\0\u002b\u005a\u0001\0\u0001\u005a\u0003\0" +
+          "\u0100\u0066\u0049\u005a\u0001\0\u0004\u005a\u0002\0\u0007\u005a\u0001\0\u0001\u005a\u0001\0\u0004\u005a" +
+          "\u0002\0\u0029\u005a\u0001\0\u0004\u005a\u0002\0\u0021\u005a\u0001\0\u0004\u005a\u0002\0\u0007\u005a" +
+          "\u0001\0\u0001\u005a\u0001\0\u0004\u005a\u0002\0\u000f\u005a\u0001\0\u0039\u005a\u0001\0\u0004\u005a" +
+          "\u0002\0\u0043\u005a\u0002\0\u0003\u005b\u0020\0\u0010\u005a\u0010\0\u0055\u005a\u000c\0\u026c\u005a" +
+          "\u0002\0\u0011\u005a\u0001\0\u001a\u005a\u0005\0\u004b\u005a\u0003\0\u0003\u005a\u000f\0\u000d\u005a" +
+          "\u0001\0\u0004\u005a\u0003\u005b\u000b\0\u0012\u005a\u0003\u005b\u000b\0\u0012\u005a\u0002\u005b\u000c\0" +
+          "\u000d\u005a\u0001\0\u0003\u005a\u0001\0\u0002\u005b\u000c\0\u0034\u0062\u0002\u0063\u001e\u0063\u0003\0" +
+          "\u0001\u0062\u0004\0\u0001\u0062\u0001\u0063\u0002\0\u000a\u005c\u0021\0\u0003\u005b\u0002\0\u000a\u005c" +
+          "\u0006\0\u0058\u005a\u0008\0\u0029\u005a\u0001\u005b\u0001\u005a\u0005\0\u0046\u005a\u000a\0\u001d\u005a" +
+          "\u0003\0\u000c\u005b\u0004\0\u000c\u005b\u000a\0\u000a\u005c\u001e\u0062\u0002\0\u0005\u0062\u000b\0" +
+          "\u002c\u0062\u0004\0\u0011\u0063\u0007\u0062\u0002\u0063\u0006\0\u000a\u005c\u0001\u0062\u0003\0\u0002\u0062" +
+          "\u0020\0\u0017\u005a\u0005\u005b\u0004\0\u0035\u0062\u000a\u0063\u0001\0\u001d\u0063\u0002\0\u0001\u005b" +
+          "\u000a\u005c\u0006\0\u000a\u005c\u0006\0\u000e\u0062\u0052\0\u0005\u005b\u002f\u005a\u0011\u005b\u0007\u005a" +
+          "\u0004\0\u000a\u005c\u0011\0\u0009\u005b\u000c\0\u0003\u005b\u001e\u005a\u000a\u005b\u0003\0\u0002\u005a" +
+          "\u000a\u005c\u0006\0\u0026\u005a\u000e\u005b\u000c\0\u0024\u005a\u0014\u005b\u0008\0\u000a\u005c\u0003\0" +
+          "\u0003\u005a\u000a\u005c\u0024\u005a\u0052\0\u0003\u005b\u0001\0\u0015\u005b\u0004\u005a\u0001\u005b\u0004\u005a" +
+          "\u0001\u005b\u000d\0\u00c0\u005a\u0027\u005b\u0015\0\u0004\u005b\u0116\u005a\u0002\0\u0006\u005a\u0002\0" +
+          "\u0026\u005a\u0002\0\u0006\u005a\u0002\0\u0008\u005a\u0001\0\u0001\u005a\u0001\0\u0001\u005a\u0001\0" +
+          "\u0001\u005a\u0001\0\u001f\u005a\u0002\0\u0035\u005a\u0001\0\u0007\u005a\u0001\0\u0001\u005a\u0003\0" +
+          "\u0003\u005a\u0001\0\u0007\u005a\u0003\0\u0004\u005a\u0002\0\u0006\u005a\u0004\0\u000d\u005a\u0005\0" +
+          "\u0003\u005a\u0001\0\u0007\u005a\u000f\0\u0002\u005b\u0002\u005b\u0008\0\u0002\u0060\u000a\0\u0001\u0060" +
+          "\u0002\0\u0001\u005e\u0002\0\u0005\u005b\u0010\0\u0002\u0061\u0003\0\u0001\u005f\u000f\0\u0001\u0061" +
+          "\u000b\0\u0005\u005b\u0005\0\u0006\u005b\u0001\0\u0001\u005a\u000d\0\u0001\u005a\u0010\0\u000d\u005a" +
+          "\u0033\0\u0021\u005b\u0011\0\u0001\u005a\u0004\0\u0001\u005a\u0002\0\u000a\u005a\u0001\0\u0001\u005a" +
+          "\u0003\0\u0005\u005a\u0006\0\u0001\u005a\u0001\0\u0001\u005a\u0001\0\u0001\u005a\u0001\0\u0004\u005a" +
+          "\u0001\0\u000b\u005a\u0002\0\u0004\u005a\u0005\0\u0005\u005a\u0004\0\u0001\u005a\u0011\0\u0029\u005a" +
+          "\u032d\0\u0034\u005a\u0716\0\u002f\u005a\u0001\0\u002f\u005a\u0001\0\u0085\u005a\u0006\0\u0004\u005a" +
+          "\u0003\u005b\u000e\0\u0026\u005a\u000a\0\u0036\u005a\u0009\0\u0001\u005a\u000f\0\u0001\u005b\u0017\u005a" +
+          "\u0009\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0007\u005a" +
+          "\u0001\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0007\u005a\u0001\0\u0020\u005b\u002f\0\u0001\u005a" +
+          "\u0050\0\u001a\u0064\u0001\0\u0059\u0064\u000c\0\u00d6\u0064\u002f\0\u0001\u005a\u0001\0\u0001\u0064" +
+          "\u0019\0\u0009\u0064\u0004\u005b\u0002\u005b\u0001\0\u0005\u005d\u0002\0\u0003\u0064\u0001\u005a\u0001\u005a" +
+          "\u0004\0\u0056\u0065\u0002\0\u0002\u005b\u0002\u005d\u0003\u0065\u005b\u005d\u0001\0\u0004\u005d\u0005\0" +
+          "\u0029\u005a\u0003\0\u005e\u0066\u0011\0\u001b\u005a\u0035\0\u0010\u005d\u001f\0\u0041\0\u001f\0" +
+          "\u0051\0\u002f\u005d\u0001\0\u0058\u005d\u00a8\0\u19b6\u0064\u004a\0\u51cc\u0064\u0034\0\u048d\u005a" +
+          "\u0043\0\u002e\u005a\u0002\0\u010d\u005a\u0003\0\u0010\u005a\u000a\u005c\u0002\u005a\u0014\0\u002f\u005a" +
+          "\u0004\u005b\u0009\0\u0002\u005b\u0001\0\u0019\u005a\u0008\0\u0050\u005a\u0002\u005b\u0025\0\u0009\u005a" +
+          "\u0002\0\u0067\u005a\u0002\0\u0004\u005a\u0001\0\u0002\u005a\u000e\0\u000a\u005a\u0050\0\u0008\u005a" +
+          "\u0001\u005b\u0003\u005a\u0001\u005b\u0004\u005a\u0001\u005b\u0017\u005a\u0005\u005b\u0018\0\u0034\u005a\u000c\0" +
+          "\u0002\u005b\u0032\u005a\u0011\u005b\u000b\0\u000a\u005c\u0006\0\u0012\u005b\u0006\u005a\u0003\0\u0001\u005a" +
+          "\u0004\0\u000a\u005c\u001c\u005a\u0008\u005b\u0002\0\u0017\u005a\u000d\u005b\u000c\0\u001d\u0066\u0003\0" +
+          "\u0004\u005b\u002f\u005a\u000e\u005b\u000e\0\u0001\u005a\u000a\u005c\u0026\0\u0029\u005a\u000e\u005b\u0009\0" +
+          "\u0003\u005a\u0001\u005b\u0008\u005a\u0002\u005b\u0002\0\u000a\u005c\u0006\0\u001b\u0062\u0001\u0063\u0004\0" +
+          "\u0030\u0062\u0001\u0063\u0001\u0062\u0003\u0063\u0002\u0062\u0002\u0063\u0005\u0062\u0002\u0063\u0001\u0062\u0001\u0063" +
+          "\u0001\u0062\u0018\0\u0005\u0062\u0021\0\u0006\u005a\u0002\0\u0006\u005a\u0002\0\u0006\u005a\u0009\0" +
+          "\u0007\u005a\u0001\0\u0007\u005a\u0091\0\u0023\u005a\u0008\u005b\u0001\0\u0002\u005b\u0002\0\u000a\u005c" +
+          "\u0006\0\u2ba4\u0066\u000c\0\u0017\u0066\u0004\0\u0031\u0066\u0004\0\u0001\u0019\u0001\u0015\u0001\u0026" +
+          "\u0001\u0023\u0001\u000b\u0003\0\u0001\u0007\u0001\u0005\u0002\0\u0001\u0003\u0001\u0001\u000c\0\u0001\u0009" +
+          "\u0011\0\u0001\u004a\u0007\0\u0001\u0035\u0001\u000f\u0006\0\u0001\u0058\u0003\0\u0001\u0050\u0001\u0050" +
+          "\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050" +
+          "\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050" +
+          "\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050" +
+          "\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0051" +
+          "\u0001\u0050\u0001\u0050\u0001\u0050\u0001\u0055\u0001\u0053\u000f\0\u0001\u004c\u02c1\0\u0001\u0038\u00bf\0" +
+          "\u0001\u004b\u0001\u0039\u0001\u0002\u0003\u0054\u0002\u001d\u0001\u0054\u0001\u001d\u0002\u0054\u0001\u000c\u0011\u0054" +
+          "\u0002\u0030\u0007\u003b\u0001\u003a\u0007\u003b\u0007\u002a\u0001\u000d\u0001\u002a\u0001\u003d\u0002\u0025\u0001\u0024" +
+          "\u0001\u003d\u0001\u0025\u0001\u0024\u0008\u003d\u0002\u0033\u0005\u0031\u0002\u002c\u0005\u0031\u0001\u0006\u0008\u001f" +
+          "\u0005\u0011\u0003\u0017\u000a\u0046\u0010\u0017\u0003\u0022\u001a\u0018\u0001\u0016\u0002\u0014\u0002\u0048\u0001\u0049" +
+          "\u0002\u0048\u0002\u0049\u0002\u0048\u0001\u0049\u0003\u0014\u0001\u000e\u0002\u0014\u000a\u0034\u0001\u003c\u0001\u0021" +
+          "\u0001\u001c\u0001\u0034\u0006\u0021\u0001\u001c\u0036\u0021\u0005\u004d\u0006\u0043\u0001\u0029\u0004\u0043\u0002\u0029" +
+          "\u0008\u0043\u0001\u0029\u0007\u0040\u0001\u000a\u0002\u0040\u001a\u0043\u0001\u000a\u0004\u0040\u0001\u000a\u0005\u0042" +
+          "\u0001\u0041\u0001\u0042\u0003\u0041\u0007\u0042\u0001\u0041\u0013\u0042\u0005\u0037\u0003\u0042\u0006\u0037\u0002\u0037" +
+          "\u0006\u0036\u0008\u0036\u0002\u0040\u0007\u0036\u001e\u0040\u0004\u0036\u0042\u0040\u000d\u004d\u0001\u003f\u0002\u004d" +
+          "\u0001\u0059\u0003\u004f\u0001\u004d\u0002\u004f\u0005\u004d\u0004\u004f\u0004\u004e\u0001\u004d\u0003\u004e\u0001\u004d" +
+          "\u0005\u004e\u0016\u002e\u0004\u0013\u0001\u0045\u0002\u0044\u0004\u0052\u0001\u0044\u0002\u0052\u0003\u003e\u001b\u0052" +
+          "\u001d\u002d\u0003\u0052\u001d\u0056\u0003\u0052\u0006\u0056\u0002\u001b\u0019\u0056\u0001\u001b\u000f\u0056\u0006\u0052" +
+          "\u0004\u0012\u0001\u0008\u001f\u0012\u0001\u0008\u0004\u0012\u0015\u0032\u0001\u0057\u0009\u0032\u0011\u002d\u0005\u0032" +
+          "\u0001\u002f\u000a\u0020\u000b\u0032\u0004\u002d\u0001\u0028\u0006\u002d\u000a\u0052\u000f\u002d\u0001\u0027\u0003\u002b" +
+          "\u000d\u0010\u0009\u001e\u0001\u001a\u0014\u001e\u0002\u0010\u0009\u001e\u0001\u001a\u0019\u001e\u0001\u001a\u0004\u0010" +
+          "\u0004\u001e\u0002\u001a\u0002\u0047\u0001\u0004\u0005\u0047\u002a\u0004\u1900\0\u012e\u0064\u0002\0\u003e\u0064" +
+          "\u0002\0\u006a\u0064\u0026\0\u0007\u005a\u000c\0\u0005\u005a\u0005\0\u0001\u005a\u0001\u005b\u000a\u005a" +
+          "\u0001\0\u000d\u005a\u0001\0\u0005\u005a\u0001\0\u0001\u005a\u0001\0\u0002\u005a\u0001\0\u0002\u005a" +
+          "\u0001\0\u006c\u005a\u0021\0\u016b\u005a\u0012\0\u0040\u005a\u0002\0\u0036\u005a\u0028\0\u000c\u005a" +
+          "\u0004\0\u0010\u005b\u0001\u005f\u0002\0\u0001\u005e\u0001\u005f\u000b\0\u0007\u005b\u000c\0\u0002\u0061" +
+          "\u0018\0\u0003\u0061\u0001\u005f\u0001\0\u0001\u0060\u0001\0\u0001\u005f\u0001\u005e\u001a\0\u0005\u005a" +
+          "\u0001\0\u0087\u005a\u0002\0\u0001\u005b\u0007\0\u0001\u0060\u0004\0\u0001\u005f\u0001\0\u0001\u0060" +
+          "\u0001\0\u000a\u005c\u0001\u005e\u0001\u005f\u0005\0\u001a\u005a\u0004\0\u0001\u0061\u0001\0\u001a\u005a" +
+          "\u000b\0\u0038\u005d\u0002\u005b\u001f\u0066\u0003\0\u0006\u0066\u0002\0\u0006\u0066\u0002\0\u0006\u0066" +
+          "\u0002\0\u0003\u0066\u001c\0\u0003\u005b\u0004\0";
+
+        /** 
+         * Translates characters to character classes
+         */
+        private static readonly char[] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+        /** 
+         * Translates DFA states to action switch labels.
+         */
+        private static readonly int[] ZZ_ACTION = zzUnpackAction();
+
+        private const String ZZ_ACTION_PACKED_0 =
+          "\u0001\0\u0013\u0001\u0001\u0002\u0001\u0003\u0001\u0004\u0001\u0001\u0001\u0005\u0001\u0006" +
+          "\u0001\u0007\u0001\u0008\u000d\0\u0001\u0002\u0001\0\u0001\u0002\u0008\0\u0001\u0003" +
+          "\u000d\0\u0001\u0002\u0039\0";
+
+        private static int[] zzUnpackAction()
+        {
+            int[] result = new int[124];
+            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[i++];
+                int value = packed[i++];
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+
+        /** 
+         * Translates a state to a row index in the transition table
+         */
+        private static readonly int[] ZZ_ROWMAP = zzUnpackRowMap();
+
+        private const String ZZ_ROWMAP_PACKED_0 =
+          "\0\0\0\u0067\0\u00ce\0\u0135\0\u019c\0\u0203\0\u026a\0\u02d1" +
+          "\0\u0338\0\u039f\0\u0406\0\u046d\0\u04d4\0\u053b\0\u05a2\0\u0609" +
+          "\0\u0670\0\u06d7\0\u073e\0\u07a5\0\u080c\0\u0873\0\u08da\0\u0941" +
+          "\0\u09a8\0\u0a0f\0\u0a76\0\u0add\0\u00ce\0\u0135\0\u019c\0\u0203" +
+          "\0\u026a\0\u0b44\0\u0bab\0\u0c12\0\u0c79\0\u046d\0\u0ce0\0\u0d47" +
+          "\0\u0dae\0\u0e15\0\u0e7c\0\u0ee3\0\u0f4a\0\u0338\0\u039f\0\u0fb1" +
+          "\0\u1018\0\u107f\0\u10e6\0\u114d\0\u11b4\0\u121b\0\u1282\0\u12e9" +
+          "\0\u1350\0\u13b7\0\u141e\0\u1485\0\u14ec\0\u1553\0\u15ba\0\u1621" +
+          "\0\u1688\0\u0941\0\u16ef\0\u1756\0\u17bd\0\u1824\0\u188b\0\u18f2" +
+          "\0\u1959\0\u19c0\0\u1a27\0\u1a8e\0\u1af5\0\u1b5c\0\u1bc3\0\u1c2a" +
+          "\0\u1c91\0\u1cf8\0\u1d5f\0\u1dc6\0\u1e2d\0\u1e94\0\u1efb\0\u1f62" +
+          "\0\u1fc9\0\u2030\0\u2097\0\u20fe\0\u2165\0\u21cc\0\u2233\0\u229a" +
+          "\0\u2301\0\u2368\0\u23cf\0\u2436\0\u249d\0\u2504\0\u256b\0\u25d2" +
+          "\0\u2639\0\u26a0\0\u2707\0\u276e\0\u27d5\0\u283c\0\u28a3\0\u290a" +
+          "\0\u2971\0\u29d8\0\u2a3f\0\u2aa6\0\u2b0d\0\u2b74\0\u2bdb\0\u2c42" +
+          "\0\u2ca9\0\u2d10\0\u2d77\0\u2dde";
+
+        private static int[] zzUnpackRowMap()
+        {
+            int[] result = new int[124];
+            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;
+            while (i < l)
+            {
+                int high = packed[i++] << 16;
+                result[j++] = high | packed[i++];
+            }
+            return j;
+        }
+
+        /** 
+         * The transition table of the DFA
+         */
+        private static readonly int[] ZZ_TRANS = zzUnpackTrans();
+
+        private const String ZZ_TRANS_PACKED_0 =
+          "\u0001\u0002\u0001\u0003\u0001\u0002\u0001\u0004\u0001\u0002\u0001\u0005\u0001\u0002\u0001\u0006" +
+          "\u0001\u0002\u0001\u0007\u0001\u0002\u0001\u0008\u0003\u0002\u0001\u0009\u0005\u0002\u0001\u000a" +
+          "\u0003\u0002\u0001\u000b\u0009\u0002\u0001\u000c\u0002\u0002\u0001\u000d\u0023\u0002\u0001\u000e" +
+          "\u0001\u0002\u0001\u000f\u0003\u0002\u0001\u0010\u0001\u0011\u0001\u0002\u0001\u0012\u0001\u0002" +
+          "\u0001\u0013\u0002\u0002\u0001\u0014\u0001\u0002\u0001\u0015\u0001\u0002\u0001\u0016\u0001\u0017" +
+          "\u0003\u0002\u0001\u0018\u0002\u0019\u0001\u001a\u0001\u001b\u0001\u001c\u0069\0\u0001\u0015" +
+          "\u0009\0\u0001\u0015\u0010\0\u0001\u0015\u0012\0\u0001\u0015\u0008\0\u0003\u0015" +
+          "\u000f\0\u0001\u0015\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015" +
+          "\u0001\0\u0005\u0015\u0001\0\u0003\u0015\u0001\0\u0009\u0015\u0001\0\u0002\u0015" +
+          "\u0001\0\u000e\u0015\u0001\0\u0002\u0015\u0001\0\u0011\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0003\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0002\u0015" +
+          "\u0001\0\u0001\u0015\u000f\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0002\u0015" +
+          "\u0003\0\u0001\u0015\u000b\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0\u0002\u0015" +
+          "\u0004\0\u0001\u0015\u0001\0\u0001\u0015\u0003\0\u0002\u0015\u0001\0\u0001\u0015" +
+          "\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u000d\0\u0001\u0015\u0008\0\u0001\u0015" +
+          "\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0003\u0015\u0002\0\u0004\u0015\u0001\0\u0003\u0015\u0002\0\u0003\u0015" +
+          "\u0001\0\u0004\u0015\u0001\0\u0002\u0015\u0002\0\u0003\u0015\u0001\0\u0009\u0015" +
+          "\u0001\0\u0002\u0015\u0001\0\u000e\u0015\u0001\0\u0002\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0003\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0002\u0015" +
+          "\u0001\0\u0001\u0015\u000f\0\u0001\u0015\u0003\0\u0001\u0015\u0003\0\u0001\u0015" +
+          "\u0001\0\u0003\u0015\u0002\0\u0001\u0015\u0001\0\u0002\u0015\u0001\0\u0003\u0015" +
+          "\u0003\0\u0002\u0015\u0001\0\u0001\u0015\u0001\0\u0002\u0015\u0001\0\u0002\u0015" +
+          "\u0003\0\u0002\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0002\u0015" +
+          "\u0001\0\u0002\u0015\u0001\0\u0002\u0015\u0001\0\u0005\u0015\u0001\0\u0005\u0015" +
+          "\u0001\0\u0002\u0015\u0001\0\u0002\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015" +
+          "\u0004\0\u0001\u0015\u0004\0\u0001\u0015\u0019\0\u0003\u0015\u0005\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0\u0001\u0015\u000c\0\u0001\u0015" +
+          "\u0005\0\u0001\u0015\u0009\0\u0002\u0015\u000a\0\u0001\u0016\u0001\0\u0002\u0015" +
+          "\u000a\0\u0001\u0015\u0014\0\u0001\u0015\u0001\0\u0001\u0016\u0007\0\u0002\u0015" +
+          "\u0002\0\u0005\u0015\u0002\0\u0002\u0015\u0004\0\u0006\u0015\u0001\0\u0002\u0015" +
+          "\u0004\0\u0005\u0015\u0001\0\u0005\u0015\u0001\0\u0002\u0015\u0001\0\u0003\u0015" +
+          "\u0001\0\u0004\u0015\u0001\0\u0005\u0015\u0001\u0016\u0001\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0003\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0002\0\u0001\u0015\u000f\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0" +
+          "\u0002\u0015\u0003\0\u0001\u0015\u0004\0\u0003\u0015\u0004\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0002\u0015\u0004\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0003\0\u0002\u0015\u0001\0\u0001\u0015\u0005\0\u0003\u0015\u0001\0" +
+          "\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0016\u0001\0\u0001\u0015\u0008\0" +
+          "\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0006\0\u0002\u0015\u0005\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0009\u0015\u0002\0" +
+          "\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0006\u0015\u0002\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0003\u0015\u0003\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0" +
+          "\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0009\0" +
+          "\u0002\u0015\u000f\0\u0001\u0015\u0006\0\u0002\u0015\u0004\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u0002\0\u0001\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u000d\0" +
+          "\u0001\u0015\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u0007\0\u0001\u0015\u0002\0\u0001\u0015\u0005\0\u0001\u0015\u0002\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0046\0\u0001\u001b\u0011\0\u0001\u0017\u001d\0" +
+          "\u0001\u001a\u0003\0\u0001\u001a\u0003\0\u0001\u001a\u0001\0\u0003\u001a\u0002\0" +
+          "\u0001\u001a\u0002\0\u0001\u001a\u0001\0\u0003\u001a\u0003\0\u0002\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0002\u001a\u0001\0\u0002\u001a\u0003\0\u0002\u001a\u0001\0" +
+          "\u0001\u001a\u0003\0\u0002\u001a\u0001\0\u0002\u001a\u0001\0\u0002\u001a\u0001\0" +
+          "\u0005\u001a\u0001\0\u0005\u001a\u0002\0\u0001\u001a\u0001\0\u0002\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0003\u001a\u0004\0\u0001\u001a\u0004\0\u0001\u001a\u000f\0" +
+          "\u0001\u001a\u0001\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0003\u001a\u0001\0\u0005\u001a\u0001\0\u0003\u001a\u0001\0" +
+          "\u0009\u001a\u0001\0\u0002\u001a\u0001\0\u000e\u001a\u0001\0\u0002\u001a\u0001\0" +
+          "\u0011\u001a\u0001\0\u0001\u001a\u0001\0\u0003\u001a\u0002\0\u0001\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0002\u001a\u0001\0\u0001\u001a\u000f\0\u0001\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0001\u001a\u0003\0\u0001\u001a\u0001\0\u0003\u001a\u0001\0" +
+          "\u0002\u001a\u0001\0\u0002\u001a\u0001\0\u0003\u001a\u0001\0\u0009\u001a\u0001\0" +
+          "\u0002\u001a\u0001\0\u000e\u001a\u0001\0\u0002\u001a\u0001\0\u0011\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0003\u001a\u0002\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0" +
+          "\u0002\u001a\u0001\0\u0001\u001a\u000f\0\u0001\u001a\u0009\0\u0001\u001a\u0010\0" +
+          "\u0001\u001a\u001b\0\u0001\u001a\u0011\0\u0001\u001a\u0008\0\u0001\u001a\u0014\0" +
+          "\u0001\u001a\u0001\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0" +
+          "\u0001\u001a\u0001\0\u0003\u001a\u0001\0\u0005\u001a\u0001\0\u0003\u001a\u0001\0" +
+          "\u0006\u001a\u0001\0\u0002\u001a\u0001\0\u0002\u001a\u0001\0\u0008\u001a\u0001\0" +
+          "\u0005\u001a\u0001\0\u0002\u001a\u0001\0\u0011\u001a\u0001\0\u0001\u001a\u0001\0" +
+          "\u0003\u001a\u0002\0\u0001\u001a\u0001\0\u0001\u001a\u0001\0\u0002\u001a\u0001\0" +
+          "\u0001\u001a\u0066\0\u0001\u001b\u000e\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0" +
+          "\u0001\u001f\u0001\0\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u0022\u0003\0" +
+          "\u0001\u0023\u0005\0\u0001\u0024\u0003\0\u0001\u0025\u0009\0\u0001\u0026\u0002\0" +
+          "\u0001\u0027\u000e\0\u0001\u0028\u0002\0\u0001\u0029\u0021\0\u0002\u0015\u0001\u002a" +
+          "\u0001\0\u0001\u002b\u0001\0\u0001\u002b\u0001\u002c\u0001\0\u0001\u0015\u0002\0" +
+          "\u0001\u0015\u0001\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0\u0001\u001f\u0001\0" +
+          "\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u002d\u0003\0\u0001\u002e\u0005\0" +
+          "\u0001\u002f\u0003\0\u0001\u0030\u0009\0\u0001\u0026\u0002\0\u0001\u0031\u000e\0" +
+          "\u0001\u0032\u0002\0\u0001\u0033\u0021\0\u0001\u0015\u0002\u0016\u0002\0\u0002\u0034" +
+          "\u0001\u0035\u0001\0\u0001\u0016\u0002\0\u0001\u0015\u000b\0\u0001\u0036\u000d\0" +
+          "\u0001\u0037\u000c\0\u0001\u0038\u000e\0\u0001\u0039\u0002\0\u0001\u003a\u0011\0" +
+          "\u0001\u003b\u0010\0\u0001\u0017\u0001\0\u0001\u0017\u0003\0\u0001\u002c\u0001\0" +
+          "\u0001\u0017\u0004\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0\u0001\u001f\u0001\0" +
+          "\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u003c\u0003\0\u0001\u002e\u0005\0" +
+          "\u0001\u002f\u0003\0\u0001\u003d\u0009\0\u0001\u0026\u0002\0\u0001\u003e\u000e\0" +
+          "\u0001\u003f\u0002\0\u0001\u0040\u0011\0\u0001\u0041\u000f\0\u0001\u0015\u0001\u0042" +
+          "\u0001\u0016\u0001\u0043\u0003\0\u0001\u0042\u0001\0\u0001\u0042\u0002\0\u0001\u0015" +
+          "\u0062\0\u0002\u0019\u000e\0\u0001\u0044\u000d\0\u0001\u0045\u000c\0\u0001\u0046" +
+          "\u000e\0\u0001\u0047\u0002\0\u0001\u0048\u0022\0\u0001\u001a\u0007\0\u0001\u001a" +
+          "\u000e\0\u0001\u0049\u000d\0\u0001\u004a\u000c\0\u0001\u004b\u000e\0\u0001\u004c" +
+          "\u0002\0\u0001\u004d\u0022\0\u0001\u001b\u0007\0\u0001\u001b\u0004\0\u0001\u001d" +
+          "\u0001\0\u0001\u001e\u0001\0\u0001\u001f\u0001\0\u0001\u0020\u0001\0\u0001\u0021" +
+          "\u0001\0\u0001\u004e\u0003\0\u0001\u0023\u0005\0\u0001\u0024\u0003\0\u0001\u004f" +
+          "\u0009\0\u0001\u0026\u0002\0\u0001\u0050\u000e\0\u0001\u0051\u0002\0\u0001\u0052" +
+          "\u0021\0\u0001\u0015\u0001\u001c\u0001\u002a\u0001\0\u0001\u002b\u0001\0\u0001\u002b" +
+          "\u0001\u002c\u0001\0\u0001\u001c\u0002\0\u0001\u001c\u0002\0\u0001\u0015\u0009\0" +
+          "\u0003\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0" +
+          "\u0001\u0015\u0004\0\u0001\u0015\u0001\0\u0002\u0015\u0004\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u0003\0\u0001\u0015\u0004\0\u0005\u0015\u0008\0\u0001\u002a\u0001\0" +
+          "\u0002\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0001\0" +
+          "\u0001\u002a\u0007\0\u0002\u0015\u0002\0\u0005\u0015\u0002\0\u0002\u0015\u0004\0" +
+          "\u0006\u0015\u0001\0\u0002\u0015\u0004\0\u0005\u0015\u0001\0\u0005\u0015\u0001\0" +
+          "\u0002\u0015\u0001\0\u0003\u0015\u0001\0\u0004\u0015\u0001\0\u0005\u0015\u0001\u002a" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0002\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0002\0\u0001\u0015\u000f\0\u0001\u0015" +
+          "\u0003\0\u0001\u0015\u0005\0\u0002\u0015\u0003\0\u0001\u0015\u0004\0\u0003\u0015" +
+          "\u0004\0\u0001\u0015\u0001\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0002\u0015" +
+          "\u0004\0\u0001\u0015\u0001\0\u0001\u0015\u0003\0\u0002\u0015\u0001\0\u0001\u0015" +
+          "\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u002a" +
+          "\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015" +
+          "\u0006\0\u0002\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0009\u0015\u0002\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0006\u0015" +
+          "\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015" +
+          "\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0001\u0015" +
+          "\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0005\0\u0003\u0015" +
+          "\u0005\0\u0001\u0015\u0002\0\u0002\u0015\u0004\0\u0001\u0015\u0002\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0043\0\u0002\u0015\u0006\0\u0001\u0015\u002e\0\u0001\u0015" +
+          "\u0003\0\u0001\u0015\u0002\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0001\u0015" +
+          "\u0007\0\u0001\u0015\u0004\0\u0002\u0015\u0003\0\u0002\u0015\u0001\0\u0001\u0015" +
+          "\u0004\0\u0001\u0015\u0001\0\u0001\u0015\u0002\0\u0002\u0015\u0001\0\u0003\u0015" +
+          "\u0001\0\u0001\u0015\u0002\0\u0004\u0015\u0002\0\u0001\u0015\u0021\0\u0001\u001d" +
+          "\u0001\0\u0001\u001e\u0001\0\u0001\u001f\u0001\0\u0001\u0020\u0001\0\u0001\u0021" +
+          "\u0001\0\u0001\u0053\u0003\0\u0001\u0023\u0005\0\u0001\u0024\u0003\0\u0001\u0054" +
+          "\u0009\0\u0001\u0026\u0002\0\u0001\u0055\u000e\0\u0001\u0056\u0002\0\u0001\u0057" +
+          "\u0021\0\u0001\u0015\u0002\u002a\u0002\0\u0002\u0058\u0001\u002c\u0001\0\u0001\u002a" +
+          "\u0002\0\u0001\u0015\u0001\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0\u0001\u001f" +
+          "\u0001\0\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u0059\u0003\0\u0001\u005a" +
+          "\u0005\0\u0001\u005b\u0003\0\u0001\u005c\u0009\0\u0001\u0026\u0002\0\u0001\u005d" +
+          "\u000e\0\u0001\u005e\u0002\0\u0001\u005f\u0021\0\u0001\u0015\u0001\u002b\u0007\0" +
+          "\u0001\u002b\u0002\0\u0001\u0015\u0001\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0" +
+          "\u0001\u001f\u0001\0\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u0060\u0003\0" +
+          "\u0001\u0023\u0005\0\u0001\u0024\u0003\0\u0001\u0061\u0009\0\u0001\u0026\u0002\0" +
+          "\u0001\u0062\u000e\0\u0001\u0063\u0002\0\u0001\u0064\u0011\0\u0001\u0041\u000f\0" +
+          "\u0001\u0015\u0001\u002c\u0001\u002a\u0001\u0043\u0003\0\u0001\u002c\u0001\0\u0001\u002c" +
+          "\u0002\0\u0001\u0015\u0002\0\u0001\u0016\u0009\0\u0003\u0015\u0005\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0001\u0016" +
+          "\u0001\0\u0002\u0016\u0004\0\u0001\u0015\u0005\0\u0001\u0015\u0003\0\u0001\u0016" +
+          "\u0004\0\u0001\u0016\u0002\u0015\u0002\u0016\u0008\0\u0001\u0016\u0001\0\u0002\u0015" +
+          "\u0001\0\u0001\u0016\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015" +
+          "\u0006\0\u0002\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0009\u0015\u0002\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0006\u0015" +
+          "\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0001\0\u0001\u0016" +
+          "\u0001\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015" +
+          "\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0001\u0015" +
+          "\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0005\0\u0001\u0015" +
+          "\u0002\u0016\u0005\0\u0001\u0015\u0002\0\u0001\u0015\u0001\u0016\u0004\0\u0001\u0015" +
+          "\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0043\0\u0002\u0016\u0006\0\u0001\u0016" +
+          "\u002e\0\u0001\u0016\u0003\0\u0001\u0016\u0002\0\u0001\u0016\u0003\0\u0001\u0016" +
+          "\u0005\0\u0001\u0016\u0007\0\u0001\u0016\u0004\0\u0002\u0016\u0003\0\u0002\u0016" +
+          "\u0001\0\u0001\u0016\u0004\0\u0001\u0016\u0001\0\u0001\u0016\u0002\0\u0002\u0016" +
+          "\u0001\0\u0003\u0016\u0001\0\u0001\u0016\u0002\0\u0004\u0016\u0002\0\u0001\u0016" +
+          "\u002b\0\u0001\u0065\u0003\0\u0001\u0066\u0005\0\u0001\u0067\u0003\0\u0001\u0068" +
+          "\u000c\0\u0001\u0069\u000e\0\u0001\u006a\u0002\0\u0001\u006b\u0022\0\u0001\u0034" +
+          "\u0001\u0016\u0006\0\u0001\u0034\u0004\0\u0001\u001d\u0001\0\u0001\u001e\u0001\0" +
+          "\u0001\u001f\u0001\0\u0001\u0020\u0001\0\u0001\u0021\u0001\0\u0001\u006c\u0003\0" +
+          "\u0001\u002e\u0005\0\u0001\u002f\u0003\0\u0001\u006d\u0009\0\u0001\u0026\u0002\0" +
+          "\u0001\u006e\u000e\0\u0001\u006f\u0002\0\u0001\u0070\u0011\0\u0001\u0041\u000f\0" +
+          "\u0001\u0015\u0001\u0035\u0001\u0016\u0001\u0043\u0003\0\u0001\u0035\u0001\0\u0001\u0035" +
+          "\u0002\0\u0001\u0015\u0002\0\u0001\u0017\u001f\0\u0001\u0017\u0001\0\u0002\u0017" +
+          "\u000e\0\u0001\u0017\u0004\0\u0001\u0017\u0002\0\u0002\u0017\u000d\0\u0001\u0017" +
+          "\u005a\0\u0001\u0017\u006b\0\u0002\u0017\u0009\0\u0001\u0017\u004d\0\u0002\u0017" +
+          "\u0006\0\u0001\u0017\u002e\0\u0001\u0017\u0003\0\u0001\u0017\u0002\0\u0001\u0017" +
+          "\u0003\0\u0001\u0017\u0005\0\u0001\u0017\u0007\0\u0001\u0017\u0004\0\u0002\u0017" +
+          "\u0003\0\u0002\u0017\u0001\0\u0001\u0017\u0004\0\u0001\u0017\u0001\0\u0001\u0017" +
+          "\u0002\0\u0002\u0017\u0001\0\u0003\u0017\u0001\0\u0001\u0017\u0002\0\u0004\u0017" +
+          "\u0002\0\u0001\u0017\u006b\0\u0001\u0017\u001d\0\u0001\u0042\u0009\0\u0003\u0015" +
+          "\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0\u0001\u0015" +
+          "\u0004\0\u0001\u0042\u0001\0\u0002\u0042\u0004\0\u0001\u0015\u0005\0\u0001\u0015" +
+          "\u0003\0\u0001\u0042\u0004\0\u0001\u0042\u0002\u0015\u0002\u0042\u0008\0\u0001\u0016" +
+          "\u0001\0\u0002\u0015\u0001\0\u0001\u0042\u0008\0\u0001\u0015\u0014\0\u0001\u0015" +
+          "\u0003\0\u0001\u0015\u0006\0\u0002\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0009\u0015\u0002\0\u0001\u0015\u0004\0\u0001\u0015" +
+          "\u0004\0\u0006\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015" +
+          "\u0001\0\u0001\u0042\u0001\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0\u0001\u0015" +
+          "\u0008\0\u0001\u0015\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0003\0\u0001\u0015" +
+          "\u0005\0\u0001\u0015\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015" +
+          "\u0005\0\u0001\u0015\u0002\u0042\u0005\0\u0001\u0015\u0002\0\u0001\u0015\u0001\u0042" +
+          "\u0004\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0043\0\u0002\u0042" +
+          "\u0006\0\u0001\u0042\u002e\0\u0001\u0042\u0003\0\u0001\u0042\u0002\0\u0001\u0042" +
+          "\u0003\0\u0001\u0042\u0005\0\u0001\u0042\u0007\0\u0001\u0042\u0004\0\u0002\u0042" +
+          "\u0003\0\u0002\u0042\u0001\0\u0001\u0042\u0004\0\u0001\u0042\u0001\0\u0001\u0042" +
+          "\u0002\0\u0002\u0042\u0001\0\u0003\u0042\u0001\0\u0001\u0042\u0002\0\u0004\u0042" +
+          "\u0002\0\u0001\u0042\u006b\0\u0001\u0043\u0026\0\u0001\u0071\u000d\0\u0001\u0072" +
+          "\u000c\0\u0001\u0073\u000e\0\u0001\u0074\u0002\0\u0001\u0075\u0011\0\u0001\u0041" +
+          "\u0010\0\u0001\u0043\u0001\0\u0001\u0043\u0003\0\u0001\u002c\u0001\0\u0001\u0043" +
+          "\u0005\0\u0001\u001a\u001f\0\u0001\u001a\u0001\0\u0002\u001a\u000e\0\u0001\u001a" +
+          "\u0004\0\u0001\u001a\u0002\0\u0002\u001a\u000d\0\u0001\u001a\u005a\0\u0001\u001a" +
+          "\u006b\0\u0002\u001a\u0009\0\u0001\u001a\u004d\0\u0002\u001a\u0006\0\u0001\u001a" +
+          "\u002e\0\u0001\u001a\u0003\0\u0001\u001a\u0002\0\u0001\u001a\u0003\0\u0001\u001a" +
+          "\u0005\0\u0001\u001a\u0007\0\u0001\u001a\u0004\0\u0002\u001a\u0003\0\u0002\u001a" +
+          "\u0001\0\u0001\u001a\u0004\0\u0001\u001a\u0001\0\u0001\u001a\u0002\0\u0002\u001a" +
+          "\u0001\0\u0003\u001a\u0001\0\u0001\u001a\u0002\0\u0004\u001a\u0002\0\u0001\u001a" +
+          "\u0022\0\u0001\u001b\u001f\0\u0001\u001b\u0001\0\u0002\u001b\u000e\0\u0001\u001b" +
+          "\u0004\0\u0001\u001b\u0002\0\u0002\u001b\u000d\0\u0001\u001b\u005a\0\u0001\u001b" +
+          "\u006b\0\u0002\u001b\u0009\0\u0001\u001b\u004d\0\u0002\u001b\u0006\0\u0001\u001b" +
+          "\u002e\0\u0001\u001b\u0003\0\u0001\u001b\u0002\0\u0001\u001b\u0003\0\u0001\u001b" +
+          "\u0005\0\u0001\u001b\u0007\0\u0001\u001b\u0004\0\u0002\u001b\u0003\0\u0002\u001b" +
+          "\u0001\0\u0001\u001b\u0004\0\u0001\u001b\u0001\0\u0001\u001b\u0002\0\u0002\u001b" +
+          "\u0001\0\u0003\u001b\u0001\0\u0001\u001b\u0002\0\u0004\u001b\u0002\0\u0001\u001b" +
+          "\u0022\0\u0001\u001c\u0009\0\u0003\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0001\u001c\u0001\0\u0002\u001c" +
+          "\u0004\0\u0001\u0015\u0005\0\u0001\u0015\u0003\0\u0001\u001c\u0004\0\u0001\u001c" +
+          "\u0002\u0015\u0002\u001c\u0008\0\u0001\u002a\u0001\0\u0002\u0015\u0001\0\u0001\u001c" +
+          "\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0006\0\u0002\u0015" +
+          "\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0009\u0015" +
+          "\u0002\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0006\u0015\u0002\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0001\0\u0001\u001c\u0001\0\u0002\u0015" +
+          "\u0004\0\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0015" +
+          "\u0011\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0001\u0015\u001a\0\u000d\u0015" +
+          "\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0005\0\u0001\u0015\u0002\u001c\u0005\0" +
+          "\u0001\u0015\u0002\0\u0001\u0015\u0001\u001c\u0004\0\u0001\u0015\u0002\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0043\0\u0002\u001c\u0006\0\u0001\u001c\u002e\0\u0001\u001c" +
+          "\u0003\0\u0001\u001c\u0002\0\u0001\u001c\u0003\0\u0001\u001c\u0005\0\u0001\u001c" +
+          "\u0007\0\u0001\u001c\u0004\0\u0002\u001c\u0003\0\u0002\u001c\u0001\0\u0001\u001c" +
+          "\u0004\0\u0001\u001c\u0001\0\u0001\u001c\u0002\0\u0002\u001c\u0001\0\u0003\u001c" +
+          "\u0001\0\u0001\u001c\u0002\0\u0004\u001c\u0002\0\u0001\u001c\u0022\0\u0001\u002a" +
+          "\u0009\0\u0003\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0004\0\u0001\u0015\u0004\0\u0001\u002a\u0001\0\u0002\u002a\u0004\0\u0001\u0015" +
+          "\u0005\0\u0001\u0015\u0003\0\u0001\u002a\u0004\0\u0001\u002a\u0002\u0015\u0002\u002a" +
+          "\u0008\0\u0001\u002a\u0001\0\u0002\u0015\u0001\0\u0001\u002a\u0008\0\u0001\u0015" +
+          "\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0006\0\u0002\u0015\u0005\0\u0001\u0015" +
+          "\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0009\u0015\u0002\0\u0001\u0015" +
+          "\u0004\0\u0001\u0015\u0004\0\u0006\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0001\0\u0003\u0015\u0001\0\u0001\u002a\u0001\0\u0002\u0015\u0004\0\u0003\u0015" +
+          "\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0015\u0011\0\u0001\u0015" +
+          "\u0003\0\u0001\u0015\u0005\0\u0001\u0015\u001a\0\u000d\u0015\u0005\0\u0003\u0015" +
+          "\u0001\0\u0001\u0015\u0005\0\u0001\u0015\u0002\u002a\u0005\0\u0001\u0015\u0002\0" +
+          "\u0001\u0015\u0001\u002a\u0004\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015" +
+          "\u0043\0\u0002\u002a\u0006\0\u0001\u002a\u002e\0\u0001\u002a\u0003\0\u0001\u002a" +
+          "\u0002\0\u0001\u002a\u0003\0\u0001\u002a\u0005\0\u0001\u002a\u0007\0\u0001\u002a" +
+          "\u0004\0\u0002\u002a\u0003\0\u0002\u002a\u0001\0\u0001\u002a\u0004\0\u0001\u002a" +
+          "\u0001\0\u0001\u002a\u0002\0\u0002\u002a\u0001\0\u0003\u002a\u0001\0\u0001\u002a" +
+          "\u0002\0\u0004\u002a\u0002\0\u0001\u002a\u002b\0\u0001\u0076\u0003\0\u0001\u0077" +
+          "\u0005\0\u0001\u0078\u0003\0\u0001\u0079\u000c\0\u0001\u007a\u000e\0\u0001\u007b" +
+          "\u0002\0\u0001\u007c\u0022\0\u0001\u0058\u0001\u002a\u0006\0\u0001\u0058\u0005\0" +
+          "\u0001\u002b\u0009\0\u0003\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0001\u002b\u0001\0\u0002\u002b\u0004\0" +
+          "\u0001\u0015\u0005\0\u0001\u0015\u0003\0\u0001\u002b\u0004\0\u0001\u002b\u0002\u0015" +
+          "\u0002\u002b\u000a\0\u0002\u0015\u0001\0\u0001\u002b\u0008\0\u0001\u0015\u0014\0" +
+          "\u0001\u0015\u0009\0\u0002\u0015\u0002\0\u0005\u0015\u0002\0\u0002\u0015\u0004\0" +
+          "\u0006\u0015\u0001\0\u0002\u0015\u0004\0\u0005\u0015\u0001\0\u0005\u0015\u0001\0" +
+          "\u0002\u0015\u0001\0\u0003\u0015\u0001\0\u0004\u0015\u0001\0\u0005\u0015\u0002\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0002\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0002\0\u0001\u0015\u000f\0\u0001\u0015\u0003\0" +
+          "\u0001\u0015\u0005\0\u0002\u0015\u0003\0\u0001\u0015\u0004\0\u0003\u0015\u0004\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0002\u0015\u0004\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0003\0\u0002\u0015\u0001\0\u0001\u0015\u0005\0" +
+          "\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0004\0\u0001\u0015\u0008\0" +
+          "\u0001\u0015\u0014\0\u0001\u0015\u0003\0\u0001\u0015\u0006\0\u0002\u0015\u0005\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0009\u0015\u0002\0" +
+          "\u0001\u0015\u0004\0\u0001\u0015\u0004\0\u0006\u0015\u0002\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0003\u0015\u0001\0\u0001\u002b\u0001\0\u0002\u0015\u0004\0" +
+          "\u0003\u0015\u0001\0\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0015\u0011\0" +
+          "\u0001\u0015\u0003\0\u0001\u0015\u0005\0\u0001\u0015\u001a\0\u000d\u0015\u0005\0" +
+          "\u0003\u0015\u0001\0\u0001\u0015\u0005\0\u0001\u0015\u0002\u002b\u0005\0\u0001\u0015" +
+          "\u0002\0\u0001\u0015\u0001\u002b\u0004\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0043\0\u0002\u002b\u0006\0\u0001\u002b\u002e\0\u0001\u002b\u0003\0" +
+          "\u0001\u002b\u0002\0\u0001\u002b\u0003\0\u0001\u002b\u0005\0\u0001\u002b\u0007\0" +
+          "\u0001\u002b\u0004\0\u0002\u002b\u0003\0\u0002\u002b\u0001\0\u0001\u002b\u0004\0" +
+          "\u0001\u002b\u0001\0\u0001\u002b\u0002\0\u0002\u002b\u0001\0\u0003\u002b\u0001\0" +
+          "\u0001\u002b\u0002\0\u0004\u002b\u0002\0\u0001\u002b\u0022\0\u0001\u002c\u0009\0" +
+          "\u0003\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0" +
+          "\u0001\u0015\u0004\0\u0001\u002c\u0001\0\u0002\u002c\u0004\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u0003\0\u0001\u002c\u0004\0\u0001\u002c\u0002\u0015\u0002\u002c\u0008\0" +
+          "\u0001\u002a\u0001\0\u0002\u0015\u0001\0\u0001\u002c\u0008\0\u0001\u0015\u0014\0" +
+          "\u0001\u0015\u0003\0\u0001\u0015\u0006\0\u0002\u0015\u0005\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0009\u0015\u0002\0\u0001\u0015\u0004\0" +
+          "\u0001\u0015\u0004\0\u0006\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0" +
+          "\u0003\u0015\u0001\0\u0001\u002c\u0001\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0" +
+          "\u0001\u0015\u0008\0\u0001\u0015\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0003\0" +
+          "\u0001\u0015\u0005\0\u0001\u0015\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0" +
+          "\u0001\u0015\u0005\0\u0001\u0015\u0002\u002c\u0005\0\u0001\u0015\u0002\0\u0001\u0015" +
+          "\u0001\u002c\u0004\0\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0043\0" +
+          "\u0002\u002c\u0006\0\u0001\u002c\u002e\0\u0001\u002c\u0003\0\u0001\u002c\u0002\0" +
+          "\u0001\u002c\u0003\0\u0001\u002c\u0005\0\u0001\u002c\u0007\0\u0001\u002c\u0004\0" +
+          "\u0002\u002c\u0003\0\u0002\u002c\u0001\0\u0001\u002c\u0004\0\u0001\u002c\u0001\0" +
+          "\u0001\u002c\u0002\0\u0002\u002c\u0001\0\u0003\u002c\u0001\0\u0001\u002c\u0002\0" +
+          "\u0004\u002c\u0002\0\u0001\u002c\u0022\0\u0001\u0034\u001f\0\u0001\u0034\u0001\0" +
+          "\u0002\u0034\u000e\0\u0001\u0034\u0004\0\u0001\u0034\u0002\0\u0002\u0034\u0008\0" +
+          "\u0001\u0016\u0004\0\u0001\u0034\u001f\0\u0001\u0016\u0042\0\u0001\u0016\u0067\0" +
+          "\u0002\u0016\u005c\0\u0001\u0034\u006b\0\u0002\u0034\u0009\0\u0001\u0034\u004d\0" +
+          "\u0002\u0034\u0006\0\u0001\u0034\u002e\0\u0001\u0034\u0003\0\u0001\u0034\u0002\0" +
+          "\u0001\u0034\u0003\0\u0001\u0034\u0005\0\u0001\u0034\u0007\0\u0001\u0034\u0004\0" +
+          "\u0002\u0034\u0003\0\u0002\u0034\u0001\0\u0001\u0034\u0004\0\u0001\u0034\u0001\0" +
+          "\u0001\u0034\u0002\0\u0002\u0034\u0001\0\u0003\u0034\u0001\0\u0001\u0034\u0002\0" +
+          "\u0004\u0034\u0002\0\u0001\u0034\u0022\0\u0001\u0035\u0009\0\u0003\u0015\u0005\0" +
+          "\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0" +
+          "\u0001\u0035\u0001\0\u0002\u0035\u0004\0\u0001\u0015\u0005\0\u0001\u0015\u0003\0" +
+          "\u0001\u0035\u0004\0\u0001\u0035\u0002\u0015\u0002\u0035\u0008\0\u0001\u0016\u0001\0" +
+          "\u0002\u0015\u0001\0\u0001\u0035\u0008\0\u0001\u0015\u0014\0\u0001\u0015\u0003\0" +
+          "\u0001\u0015\u0006\0\u0002\u0015\u0005\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0" +
+          "\u0001\u0015\u0001\0\u0009\u0015\u0002\0\u0001\u0015\u0004\0\u0001\u0015\u0004\0" +
+          "\u0006\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0001\0\u0003\u0015\u0001\0" +
+          "\u0001\u0035\u0001\0\u0002\u0015\u0004\0\u0003\u0015\u0001\0\u0001\u0015\u0008\0" +
+          "\u0001\u0015\u0001\0\u0002\u0015\u0011\0\u0001\u0015\u0003\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u001a\0\u000d\u0015\u0005\0\u0003\u0015\u0001\0\u0001\u0015\u0005\0" +
+          "\u0001\u0015\u0002\u0035\u0005\0\u0001\u0015\u0002\0\u0001\u0015\u0001\u0035\u0004\0" +
+          "\u0001\u0015\u0002\0\u0001\u0015\u0001\0\u0001\u0015\u0043\0\u0002\u0035\u0006\0" +
+          "\u0001\u0035\u002e\0\u0001\u0035\u0003\0\u0001\u0035\u0002\0\u0001\u0035\u0003\0" +
+          "\u0001\u0035\u0005\0\u0001\u0035\u0007\0\u0001\u0035\u0004\0\u0002\u0035\u0003\0" +
+          "\u0002\u0035\u0001\0\u0001\u0035\u0004\0\u0001\u0035\u0001\0\u0001\u0035\u0002\0" +
+          "\u0002\u0035\u0001\0\u0003\u0035\u0001\0\u0001\u0035\u0002\0\u0004\u0035\u0002\0" +
+          "\u0001\u0035\u0022\0\u0001\u0043\u001f\0\u0001\u0043\u0001\0\u0002\u0043\u000e\0" +
+          "\u0001\u0043\u0004\0\u0001\u0043\u0002\0\u0002\u0043\u000d\0\u0001\u0043\u005a\0" +
+          "\u0001\u0043\u006b\0\u0002\u0043\u0009\0\u0001\u0043\u004d\0\u0002\u0043\u0006\0" +
+          "\u0001\u0043\u002e\0\u0001\u0043\u0003\0\u0001\u0043\u0002\0\u0001\u0043\u0003\0" +
+          "\u0001\u0043\u0005\0\u0001\u0043\u0007\0\u0001\u0043\u0004\0\u0002\u0043\u0003\0" +
+          "\u0002\u0043\u0001\0\u0001\u0043\u0004\0\u0001\u0043\u0001\0\u0001\u0043\u0002\0" +
+          "\u0002\u0043\u0001\0\u0003\u0043\u0001\0\u0001\u0043\u0002\0\u0004\u0043\u0002\0" +
+          "\u0001\u0043\u0022\0\u0001\u0058\u001f\0\u0001\u0058\u0001\0\u0002\u0058\u000e\0" +
+          "\u0001\u0058\u0004\0\u0001\u0058\u0002\0\u0002\u0058\u0008\0\u0001\u002a\u0004\0" +
+          "\u0001\u0058\u001f\0\u0001\u002a\u0042\0\u0001\u002a\u0067\0\u0002\u002a\u005c\0" +
+          "\u0001\u0058\u006b\0\u0002\u0058\u0009\0\u0001\u0058\u004d\0\u0002\u0058\u0006\0" +
+          "\u0001\u0058\u002e\0\u0001\u0058\u0003\0\u0001\u0058\u0002\0\u0001\u0058\u0003\0" +
+          "\u0001\u0058\u0005\0\u0001\u0058\u0007\0\u0001\u0058\u0004\0\u0002\u0058\u0003\0" +
+          "\u0002\u0058\u0001\0\u0001\u0058\u0004\0\u0001\u0058\u0001\0\u0001\u0058\u0002\0" +
+          "\u0002\u0058\u0001\0\u0003\u0058\u0001\0\u0001\u0058\u0002\0\u0004\u0058\u0002\0" +
+          "\u0001\u0058\u0020\0";
+
+        private static int[] zzUnpackTrans()
+        {
+            int[] result = new int[11845];
+            int offset = 0;
+            offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+            return result;
+        }
+
+        private static int zzUnpackTrans(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[i++];
+                int value = packed[i++];
+                value--;
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+
+        /* error codes */
+        private const int ZZ_UNKNOWN_ERROR = 0;
+        private const int ZZ_NO_MATCH = 1;
+        private const int ZZ_PUSHBACK_2BIG = 2;
+
+        /* error messages for the codes above */
+        private static readonly String[] ZZ_ERROR_MSG = {
+    "Unkown internal scanner error",
+    "Error: could not match input",
+    "Error: pushback value was too large"
+  };
+
+        /**
+         * ZZ_ATTRIBUTE[aState] contains the attributes of state <code>aState</code>
+         */
+        private static readonly int[] ZZ_ATTRIBUTE = zzUnpackAttribute();
+
+        private const String ZZ_ATTRIBUTE_PACKED_0 =
+          "\u0001\0\u0001\u0009\u001a\u0001\u000d\0\u0001\u0001\u0001\0\u0001\u0001\u0008\0" +
+          "\u0001\u0001\u000d\0\u0001\u0001\u0039\0";
+
+        private static int[] zzUnpackAttribute()
+        {
+            int[] result = new int[124];
+            int offset = 0;
+            offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+            return result;
+        }
+
+        private static int zzUnpackAttribute(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[i++];
+                int value = packed[i++];
+                do result[j++] = value; while (--count > 0);
+            }
+            return j;
+        }
+
+        /** the input device */
+        private TextReader zzReader;
+
+        /** the current state of the DFA */
+        private int zzState;
+
+        /** the current lexical state */
+        private int zzLexicalState = YYINITIAL;
+
+        /** this buffer contains the current text to be matched and is
+            the source of the yytext() string */
+        private char[] zzBuffer = new char[ZZ_BUFFERSIZE];
+
+        /** the textposition at the last accepting state */
+        private int zzMarkedPos;
+
+        /** the current text position in the buffer */
+        private int zzCurrentPos;
+
+        /** startRead marks the beginning of the yytext() string in the buffer */
+        private int zzStartRead;
+
+        /** endRead marks the last character in the buffer, that has been read
+            from input */
+        private int zzEndRead;
+
+        /** number of newlines encountered up to the start of the matched text */
+        private int yyline;
+
+        /** the number of characters up to the start of the matched text */
+        private int yychar;
+
+        /**
+         * the number of characters from the last newline up to the start of the 
+         * matched text
+         */
+        private int yycolumn;
+
+        /** 
+         * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+         */
+        private bool zzAtBOL = true;
+
+        /** zzAtEOF == true <=> the scanner is at the EOF */
+        private bool zzAtEOF;
+
+        /** denotes if the user-EOF-code has already been executed */
+        private bool zzEOFDone;
+
+        /* user code: */
+        /** Alphanumeric sequences */
+        public const int WORD_TYPE = StandardTokenizer.ALPHANUM;
+
+        /** Numbers */
+        public const int NUMERIC_TYPE = StandardTokenizer.NUM;
+
+        /**
+         * Chars in class \p{Line_Break = Complex_Context} are from South East Asian
+         * scripts (Thai, Lao, Myanmar, Khmer, etc.).  Sequences of these are kept 
+         * together as as a single token rather than broken up, because the logic
+         * required to break them at word boundaries is too complex for UAX#29.
+         * <p>
+         * See Unicode Line Breaking Algorithm: http://www.unicode.org/reports/tr14/#SA
+         */
+        public const int SOUTH_EAST_ASIAN_TYPE = StandardTokenizer.SOUTHEAST_ASIAN;
+
+        public const int IDEOGRAPHIC_TYPE = StandardTokenizer.IDEOGRAPHIC;
+
+        public const int HIRAGANA_TYPE = StandardTokenizer.HIRAGANA;
+
+        public const int KATAKANA_TYPE = StandardTokenizer.KATAKANA;
+
+        public const int HANGUL_TYPE = StandardTokenizer.HANGUL;
+
+        public int YYChar
+        {
+            get
+            {
+                return yychar;
+            }
+        }
+
+        /**
+         * Fills CharTermAttribute with the current token text.
+         */
+        public void GetText(ICharTermAttribute t)
+        {
+            t.CopyBuffer(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
+        }
+
+
+        /**
+         * Creates a new scanner
+         * There is also a java.io.InputStream version of this constructor.
+         *
+         * @param   in  the TextReader to read input from.
+         */
+        public StandardTokenizerImpl34(TextReader input)
+        {
+            this.zzReader = input;
+        }
+
+
+
+        /** 
+         * Unpacks the compressed character translation table.
+         *
+         * @param packed   the packed character translation table
+         * @return         the unpacked character translation table
+         */
+        private static char[] zzUnpackCMap(String packed)
+        {
+            char[] map = new char[0x10000];
+            int i = 0;  /* index in packed string  */
+            int j = 0;  /* index in unpacked array */
+            while (i < 2650)
+            {
+                int count = packed[i++];
+                char value = packed[i++];
+                do map[j++] = value; while (--count > 0);
+            }
+            return map;
+        }
+
+
+        /**
+         * Refills the input buffer.
+         *
+         * @return      <code>false</code>, iff there was new input.
+         * 
+         * @exception   java.io.IOException  if any I/O-Error occurs
+         */
+        private bool zzRefill()
+        {
+
+            /* first: make room (if you can) */
+            if (zzStartRead > 0)
+            {
+                Array.Copy(zzBuffer, zzStartRead,
+                                 zzBuffer, 0,
+                                 zzEndRead - zzStartRead);
+
+                /* translate stored positions */
+                zzEndRead -= zzStartRead;
+                zzCurrentPos -= zzStartRead;
+                zzMarkedPos -= zzStartRead;
+                zzStartRead = 0;
+            }
+
+            /* is the buffer big enough? */
+            if (zzCurrentPos >= zzBuffer.Length)
+            {
+                /* if not: blow it up */
+                char[] newBuffer = new char[zzCurrentPos * 2];
+                Array.Copy(zzBuffer, 0, newBuffer, 0, zzBuffer.Length);
+                zzBuffer = newBuffer;
+            }
+
+            /* finally: fill the buffer with new input */
+            int numRead = zzReader.Read(zzBuffer, zzEndRead,
+                                                    zzBuffer.Length - zzEndRead);
+
+            if (numRead > 0)
+            {
+                zzEndRead += numRead;
+                return false;
+            }
+            // unlikely but not impossible: read 0 characters, but not at end of stream    
+            if (numRead == 0)
+            {
+                int c = zzReader.Read();
+                if (c <= 0)
+                {
+                    return true;
+                }
+                else
+                {
+                    zzBuffer[zzEndRead++] = (char)c;
+                    return false;
+                }
+            }
+
+            // numRead < 0
+            return true;
+        }
+
+
+        /**
+         * Closes the input stream.
+         */
+        public void yyclose()
+        {
+            zzAtEOF = true;            /* indicate end of file */
+            zzEndRead = zzStartRead;  /* invalidate buffer    */
+
+            if (zzReader != null)
+                zzReader.Close();
+        }
+
+
+        /**
+         * Resets the scanner to read from a new input stream.
+         * Does not close the old reader.
+         *
+         * All internal variables are reset, the old input stream 
+         * <b>cannot</b> be reused (internal buffer is discarded and lost).
+         * Lexical state is set to <tt>ZZ_INITIAL</tt>.
+         *
+         * Internal scan buffer is resized down to its initial length, if it has grown.
+         *
+         * @param reader   the new input stream 
+         */
+        public void YYReset(TextReader reader)
+        {
+            zzReader = reader;
+            zzAtBOL = true;
+            zzAtEOF = false;
+            zzEOFDone = false;
+            zzEndRead = zzStartRead = 0;
+            zzCurrentPos = zzMarkedPos = 0;
+            yyline = yychar = yycolumn = 0;
+            zzLexicalState = YYINITIAL;
+            if (zzBuffer.Length > ZZ_BUFFERSIZE)
+                zzBuffer = new char[ZZ_BUFFERSIZE];
+        }
+
+
+        /**
+         * Returns the current lexical state.
+         */
+        public int yystate()
+        {
+            return zzLexicalState;
+        }
+
+
+        /**
+         * Enters a new lexical state
+         *
+         * @param newState the new lexical state
+         */
+        public void yybegin(int newState)
+        {
+            zzLexicalState = newState;
+        }
+
+
+        /**
+         * Returns the text matched by the current regular expression.
+         */
+        public String yytext()
+        {
+            return new String(zzBuffer, zzStartRead, zzMarkedPos - zzStartRead);
+        }
+
+
+        /**
+         * Returns the character at position <tt>pos</tt> from the 
+         * matched text. 
+         * 
+         * It is equivalent to yytext().charAt(pos), but faster
+         *
+         * @param pos the position of the character to fetch. 
+         *            A value from 0 to yylength()-1.
+         *
+         * @return the character at position pos
+         */
+        public char yycharat(int pos)
+        {
+            return zzBuffer[zzStartRead + pos];
+        }
+
+
+        /**
+         * Returns the length of the matched text region.
+         */
+        public int YYLength
+        {
+            get
+            {
+                return zzMarkedPos - zzStartRead;
+            }
+        }
+
+
+        /**
+         * Reports an error that occured while scanning.
+         *
+         * In a wellformed scanner (no or only correct usage of 
+         * yypushback(int) and a match-all fallback rule) this method 
+         * will only be called with things that "Can't Possibly Happen".
+         * If this method is called, something is seriously wrong
+         * (e.g. a JFlex bug producing a faulty scanner etc.).
+         *
+         * Usual syntax/scanner level error handling should be done
+         * in error fallback rules.
+         *
+         * @param   errorCode  the code of the errormessage to display
+         */
+        private void zzScanError(int errorCode)
+        {
+            String message;
+            try
+            {
+                message = ZZ_ERROR_MSG[errorCode];
+            }
+            catch (IndexOutOfRangeException e)
+            {
+                message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+            }
+
+            throw new Exception(message);
+        }
+
+
+        /**
+         * Pushes the specified amount of characters back into the input stream.
+         *
+         * They will be read again by then next call of the scanning method
+         *
+         * @param number  the number of characters to be read again.
+         *                This number must not be greater than yylength()!
+         */
+        public void yypushback(int number)
+        {
+            if (number > YYLength)
+                zzScanError(ZZ_PUSHBACK_2BIG);
+
+            zzMarkedPos -= number;
+        }
+
+
+        /**
+         * Resumes scanning until the next regular expression is matched,
+         * the end of input is encountered or an I/O-Error occurs.
+         *
+         * @return      the next token
+         * @exception   java.io.IOException  if any I/O-Error occurs
+         */
+        public int GetNextToken()
+        {
+            int zzInput;
+            int zzAction;
+
+            // cached fields:
+            int zzCurrentPosL;
+            int zzMarkedPosL;
+            int zzEndReadL = zzEndRead;
+            char[] zzBufferL = zzBuffer;
+            char[] zzCMapL = ZZ_CMAP;
+
+            int[] zzTransL = ZZ_TRANS;
+            int[] zzRowMapL = ZZ_ROWMAP;
+            int[] zzAttrL = ZZ_ATTRIBUTE;
+
+            while (true)
+            {
+                zzMarkedPosL = zzMarkedPos;
+
+                yychar += zzMarkedPosL - zzStartRead;
+
+                zzAction = -1;
+
+                zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+
+                zzState = ZZ_LEXSTATE[zzLexicalState];
+
+                // set up zzAction for empty match case:
+                int zzAttributes = zzAttrL[zzState];
+                if ((zzAttributes & 1) == 1)
+                {
+                    zzAction = zzState;
+                }
+
+
+                //zzForAction: 
+                {
+                    while (true)
+                    {
+
+                        if (zzCurrentPosL < zzEndReadL)
+                            zzInput = zzBufferL[zzCurrentPosL++];
+                        else if (zzAtEOF)
+                        {
+                            zzInput = YYEOF;
+                            break;
+                        }
+                        else
+                        {
+                            // store back cached positions
+                            zzCurrentPos = zzCurrentPosL;
+                            zzMarkedPos = zzMarkedPosL;
+                            bool eof = zzRefill();
+                            // get translated positions and possibly new buffer
+                            zzCurrentPosL = zzCurrentPos;
+                            zzMarkedPosL = zzMarkedPos;
+                            zzBufferL = zzBuffer;
+                            zzEndReadL = zzEndRead;
+                            if (eof)
+                            {
+                                zzInput = YYEOF;
+                                break;
+                            }
+                            else
+                            {
+                                zzInput = zzBufferL[zzCurrentPosL++];
+                            }
+                        }
+                        int zzNext = zzTransL[zzRowMapL[zzState] + zzCMapL[zzInput]];
+                        if (zzNext == -1) break;
+                        zzState = zzNext;
+
+                        zzAttributes = zzAttrL[zzState];
+                        if ((zzAttributes & 1) == 1)
+                        {
+                            zzAction = zzState;
+                            zzMarkedPosL = zzCurrentPosL;
+                            if ((zzAttributes & 8) == 8) break;
+                        }
+
+                    }
+                }
+
+                // store back cached position
+                zzMarkedPos = zzMarkedPosL;
+
+                switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction])
+                {
+                    case 1:
+                        { /* Break so we don't hit fall-through warning: */
+                            break; /* Not numeric, word, ideographic, hiragana, or SE Asian -- ignore it. */
+                        }
+                    case 9: break;
+                    case 2:
+                        {
+                            return WORD_TYPE;
+                        }
+                    case 10: break;
+                    case 3:
+                        {
+                            return NUMERIC_TYPE;
+                        }
+                    case 11: break;
+                    case 4:
+                        {
+                            return KATAKANA_TYPE;
+                        }
+                    case 12: break;
+                    case 5:
+                        {
+                            return SOUTH_EAST_ASIAN_TYPE;
+                        }
+                    case 13: break;
+                    case 6:
+                        {
+                            return IDEOGRAPHIC_TYPE;
+                        }
+                    case 14: break;
+                    case 7:
+                        {
+                            return HIRAGANA_TYPE;
+                        }
+                    case 15: break;
+                    case 8:
+                        {
+                            return HANGUL_TYPE;
+                        }
+                    case 16: break;
+                    default:
+                        if (zzInput == YYEOF && zzStartRead == zzCurrentPos)
+                        {
+                            zzAtEOF = true;
+                            {
+                                return StandardTokenizerInterface.YYEOF;
+                            }
+                        }
+                        else
+                        {
+                            zzScanError(ZZ_NO_MATCH);
+                        }
+                        break;
+                }
+            }
+        }
+
+
+    }
+}