// Generated from antlr_tsql/tsql.g4 by ANTLR 4.6.1
// jshint ignore: start
var antlr4 = require('antlr4/index');
var tsqlListener = require('./tsqlListener').tsqlListener;
var grammarFileName = "tsql.g4";

var serializedATN = ["\u0003\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd",
    "\u0003\u01b9\u0c36\u0004\u0002\t\u0002\u0004\u0003\t\u0003\u0004\u0004",
    "\t\u0004\u0004\u0005\t\u0005\u0004\u0006\t\u0006\u0004\u0007\t\u0007",
    "\u0004\b\t\b\u0004\t\t\t\u0004\n\t\n\u0004\u000b\t\u000b\u0004\f\t\f",
    "\u0004\r\t\r\u0004\u000e\t\u000e\u0004\u000f\t\u000f\u0004\u0010\t\u0010",
    "\u0004\u0011\t\u0011\u0004\u0012\t\u0012\u0004\u0013\t\u0013\u0004\u0014",
    "\t\u0014\u0004\u0015\t\u0015\u0004\u0016\t\u0016\u0004\u0017\t\u0017",
    "\u0004\u0018\t\u0018\u0004\u0019\t\u0019\u0004\u001a\t\u001a\u0004\u001b",
    "\t\u001b\u0004\u001c\t\u001c\u0004\u001d\t\u001d\u0004\u001e\t\u001e",
    "\u0004\u001f\t\u001f\u0004 \t \u0004!\t!\u0004\"\t\"\u0004#\t#\u0004",
    "$\t$\u0004%\t%\u0004&\t&\u0004\'\t\'\u0004(\t(\u0004)\t)\u0004*\t*\u0004",
    "+\t+\u0004,\t,\u0004-\t-\u0004.\t.\u0004/\t/\u00040\t0\u00041\t1\u0004",
    "2\t2\u00043\t3\u00044\t4\u00045\t5\u00046\t6\u00047\t7\u00048\t8\u0004",
    "9\t9\u0004:\t:\u0004;\t;\u0004<\t<\u0004=\t=\u0004>\t>\u0004?\t?\u0004",
    "@\t@\u0004A\tA\u0004B\tB\u0004C\tC\u0004D\tD\u0004E\tE\u0004F\tF\u0004",
    "G\tG\u0004H\tH\u0004I\tI\u0004J\tJ\u0004K\tK\u0004L\tL\u0004M\tM\u0004",
    "N\tN\u0004O\tO\u0004P\tP\u0004Q\tQ\u0004R\tR\u0004S\tS\u0004T\tT\u0004",
    "U\tU\u0004V\tV\u0004W\tW\u0004X\tX\u0004Y\tY\u0004Z\tZ\u0004[\t[\u0004",
    "\\\t\\\u0004]\t]\u0004^\t^\u0004_\t_\u0004`\t`\u0004a\ta\u0004b\tb\u0004",
    "c\tc\u0004d\td\u0004e\te\u0004f\tf\u0004g\tg\u0004h\th\u0004i\ti\u0004",
    "j\tj\u0004k\tk\u0004l\tl\u0004m\tm\u0004n\tn\u0004o\to\u0004p\tp\u0004",
    "q\tq\u0004r\tr\u0004s\ts\u0004t\tt\u0004u\tu\u0004v\tv\u0004w\tw\u0004",
    "x\tx\u0004y\ty\u0004z\tz\u0004{\t{\u0004|\t|\u0004}\t}\u0004~\t~\u0004",
    "\u007f\t\u007f\u0004\u0080\t\u0080\u0004\u0081\t\u0081\u0004\u0082\t",
    "\u0082\u0004\u0083\t\u0083\u0004\u0084\t\u0084\u0004\u0085\t\u0085\u0004",
    "\u0086\t\u0086\u0004\u0087\t\u0087\u0004\u0088\t\u0088\u0004\u0089\t",
    "\u0089\u0004\u008a\t\u008a\u0004\u008b\t\u008b\u0004\u008c\t\u008c\u0004",
    "\u008d\t\u008d\u0004\u008e\t\u008e\u0004\u008f\t\u008f\u0004\u0090\t",
    "\u0090\u0004\u0091\t\u0091\u0004\u0092\t\u0092\u0004\u0093\t\u0093\u0004",
    "\u0094\t\u0094\u0004\u0095\t\u0095\u0004\u0096\t\u0096\u0004\u0097\t",
    "\u0097\u0004\u0098\t\u0098\u0004\u0099\t\u0099\u0004\u009a\t\u009a\u0004",
    "\u009b\t\u009b\u0004\u009c\t\u009c\u0004\u009d\t\u009d\u0004\u009e\t",
    "\u009e\u0004\u009f\t\u009f\u0004\u00a0\t\u00a0\u0004\u00a1\t\u00a1\u0004",
    "\u00a2\t\u00a2\u0004\u00a3\t\u00a3\u0004\u00a4\t\u00a4\u0004\u00a5\t",
    "\u00a5\u0004\u00a6\t\u00a6\u0004\u00a7\t\u00a7\u0004\u00a8\t\u00a8\u0003",
    "\u0002\u0007\u0002\u0152\n\u0002\f\u0002\u000e\u0002\u0155\u000b\u0002",
    "\u0003\u0002\u0003\u0002\u0003\u0003\u0003\u0003\u0005\u0003\u015b\n",
    "\u0003\u0003\u0004\u0003\u0004\u0005\u0004\u015f\n\u0004\u0006\u0004",
    "\u0161\n\u0004\r\u0004\u000e\u0004\u0162\u0003\u0005\u0003\u0005\u0003",
    "\u0005\u0003\u0005\u0005\u0005\u0169\n\u0005\u0003\u0006\u0003\u0006",
    "\u0003\u0006\u0003\u0006\u0005\u0006\u016f\n\u0006\u0003\u0007\u0003",
    "\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003",
    "\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003\u0007\u0003",
    "\u0007\u0003\u0007\u0005\u0007\u0180\n\u0007\u0003\b\u0003\b\u0005\b",
    "\u0184\n\b\u0003\b\u0005\b\u0187\n\b\u0003\b\u0003\b\u0005\b\u018b\n",
    "\b\u0003\b\u0003\b\u0005\b\u018f\n\b\u0003\b\u0003\b\u0005\b\u0193\n",
    "\b\u0003\b\u0003\b\u0003\b\u0005\b\u0198\n\b\u0003\b\u0003\b\u0003\b",
    "\u0005\b\u019d\n\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0005\b\u01a4",
    "\n\b\u0003\b\u0005\b\u01a7\n\b\u0003\b\u0003\b\u0005\b\u01ab\n\b\u0003",
    "\b\u0005\b\u01ae\n\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b",
    "\u0005\b\u01b6\n\b\u0003\b\u0005\b\u01b9\n\b\u0003\b\u0003\b\u0003\b",
    "\u0005\b\u01be\n\b\u0003\b\u0005\b\u01c1\n\b\u0003\b\u0003\b\u0003\b",
    "\u0005\b\u01c6\n\b\u0003\b\u0003\b\u0003\b\u0005\b\u01cb\n\b\u0003\b",
    "\u0005\b\u01ce\n\b\u0003\b\u0003\b\u0003\b\u0005\b\u01d3\n\b\u0003\b",
    "\u0003\b\u0003\b\u0003\b\u0005\b\u01d9\n\b\u0003\b\u0003\b\u0003\b\u0003",
    "\b\u0003\b\u0005\b\u01e0\n\b\u0003\b\u0003\b\u0005\b\u01e4\n\b\u0005",
    "\b\u01e6\n\b\u0003\b\u0003\b\u0003\b\u0005\b\u01eb\n\b\u0003\b\u0003",
    "\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0003\b\u0007\b\u01f6",
    "\n\b\f\b\u000e\b\u01f9\u000b\b\u0003\b\u0003\b\u0005\b\u01fd\n\b\u0005",
    "\b\u01ff\n\b\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t\u0003\t",
    "\u0005\t\u0208\n\t\u0003\n\u0005\n\u020b\n\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0003\n\u0005\n\u0213\n\n\u0005\n\u0215\n\n\u0003\n",
    "\u0005\n\u0218\n\n\u0003\n\u0003\n\u0005\n\u021c\n\n\u0003\n\u0005\n",
    "\u021f\n\n\u0003\n\u0003\n\u0005\n\u0223\n\n\u0003\n\u0003\n\u0003\n",
    "\u0003\n\u0003\n\u0005\n\u022a\n\n\u0003\n\u0003\n\u0005\n\u022e\n\n",
    "\u0005\n\u0230\n\n\u0005\n\u0232\n\n\u0003\n\u0005\n\u0235\n\n\u0003",
    "\n\u0005\n\u0238\n\n\u0003\n\u0005\n\u023b\n\n\u0003\u000b\u0003\u000b",
    "\u0003\u000b\u0003\u000b\u0005\u000b\u0241\n\u000b\u0003\f\u0005\f\u0244",
    "\n\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0003\f\u0005\f\u024c\n",
    "\f\u0005\f\u024e\n\f\u0003\f\u0005\f\u0251\n\f\u0003\f\u0003\f\u0005",
    "\f\u0255\n\f\u0003\f\u0005\f\u0258\n\f\u0003\f\u0003\f\u0003\f\u0003",
    "\f\u0005\f\u025e\n\f\u0003\f\u0005\f\u0261\n\f\u0003\f\u0003\f\u0005",
    "\f\u0265\n\f\u0003\f\u0005\f\u0268\n\f\u0003\f\u0005\f\u026b\n\f\u0003",
    "\r\u0003\r\u0003\r\u0003\r\u0003\r\u0005\r\u0272\n\r\u0003\u000e\u0005",
    "\u000e\u0275\n\u000e\u0003\u000e\u0003\u000e\u0005\u000e\u0279\n\u000e",
    "\u0003\u000e\u0005\u000e\u027c\n\u000e\u0003\u000e\u0005\u000e\u027f",
    "\n\u000e\u0003\u000e\u0005\u000e\u0282\n\u000e\u0003\u000f\u0005\u000f",
    "\u0285\n\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003",
    "\u000f\u0003\u000f\u0005\u000f\u028d\n\u000f\u0005\u000f\u028f\n\u000f",
    "\u0003\u000f\u0003\u000f\u0005\u000f\u0293\n\u000f\u0003\u000f\u0005",
    "\u000f\u0296\n\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f",
    "\u0007\u000f\u029c\n\u000f\f\u000f\u000e\u000f\u029f\u000b\u000f\u0003",
    "\u000f\u0005\u000f\u02a2\n\u000f\u0003\u000f\u0003\u000f\u0005\u000f",
    "\u02a6\n\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003\u000f\u0003",
    "\u000f\u0005\u000f\u02ad\n\u000f\u0003\u000f\u0003\u000f\u0005\u000f",
    "\u02b1\n\u000f\u0005\u000f\u02b3\n\u000f\u0005\u000f\u02b5\n\u000f\u0003",
    "\u000f\u0005\u000f\u02b8\n\u000f\u0003\u000f\u0005\u000f\u02bb\n\u000f",
    "\u0003\u000f\u0005\u000f\u02be\n\u000f\u0003\u0010\u0003\u0010\u0003",
    "\u0010\u0003\u0010\u0007\u0010\u02c4\n\u0010\f\u0010\u000e\u0010\u02c7",
    "\u000b\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010\u02cc\n",
    "\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0003\u0010\u0005\u0010\u02d2",
    "\n\u0010\u0005\u0010\u02d4\n\u0010\u0003\u0011\u0003\u0011\u0005\u0011",
    "\u02d8\n\u0011\u0003\u0011\u0005\u0011\u02db\n\u0011\u0003\u0011\u0005",
    "\u0011\u02de\n\u0011\u0003\u0012\u0003\u0012\u0003\u0012\u0005\u0012",
    "\u02e3\n\u0012\u0003\u0012\u0003\u0012\u0003\u0012\u0005\u0012\u02e8",
    "\n\u0012\u0003\u0012\u0005\u0012\u02eb\n\u0012\u0003\u0013\u0003\u0013",
    "\u0003\u0013\u0003\u0013\u0003\u0013\u0003\u0013\u0005\u0013\u02f3\n",
    "\u0013\u0003\u0013\u0003\u0013\u0005\u0013\u02f7\n\u0013\u0003\u0013",
    "\u0003\u0013\u0003\u0013\u0007\u0013\u02fc\n\u0013\f\u0013\u000e\u0013",
    "\u02ff\u000b\u0013\u0005\u0013\u0301\n\u0013\u0003\u0013\u0003\u0013",
    "\u0003\u0013\u0003\u0013\u0003\u0013\u0007\u0013\u0308\n\u0013\f\u0013",
    "\u000e\u0013\u030b\u000b\u0013\u0005\u0013\u030d\n\u0013\u0003\u0013",
    "\u0003\u0013\u0005\u0013\u0311\n\u0013\u0003\u0013\u0003\u0013\u0003",
    "\u0013\u0003\u0013\u0007\u0013\u0317\n\u0013\f\u0013\u000e\u0013\u031a",
    "\u000b\u0013\u0005\u0013\u031c\n\u0013\u0003\u0014\u0003\u0014\u0005",
    "\u0014\u0320\n\u0014\u0003\u0014\u0005\u0014\u0323\n\u0014\u0003\u0014",
    "\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014\u0003\u0014",
    "\u0005\u0014\u032c\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u0330",
    "\n\u0014\u0003\u0014\u0003\u0014\u0005\u0014\u0334\n\u0014\u0003\u0014",
    "\u0005\u0014\u0337\n\u0014\u0003\u0015\u0003\u0015\u0003\u0015\u0003",
    "\u0015\u0003\u0015\u0005\u0015\u033e\n\u0015\u0003\u0015\u0005\u0015",
    "\u0341\n\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0007\u0015\u0346",
    "\n\u0015\f\u0015\u000e\u0015\u0349\u000b\u0015\u0003\u0015\u0005\u0015",
    "\u034c\n\u0015\u0005\u0015\u034e\n\u0015\u0003\u0015\u0003\u0015\u0003",
    "\u0015\u0003\u0015\u0007\u0015\u0354\n\u0015\f\u0015\u000e\u0015\u0357",
    "\u000b\u0015\u0005\u0015\u0359\n\u0015\u0003\u0015\u0003\u0015\u0005",
    "\u0015\u035d\n\u0015\u0003\u0015\u0003\u0015\u0003\u0015\u0003\u0016",
    "\u0003\u0016\u0003\u0016\u0003\u0016\u0005\u0016\u0366\n\u0016\u0003",
    "\u0016\u0005\u0016\u0369\n\u0016\u0003\u0016\u0003\u0016\u0005\u0016",
    "\u036d\n\u0016\u0003\u0016\u0003\u0016\u0005\u0016\u0371\n\u0016\u0003",
    "\u0016\u0005\u0016\u0374\n\u0016\u0003\u0017\u0003\u0017\u0003\u0017",
    "\u0005\u0017\u0379\n\u0017\u0003\u0018\u0003\u0018\u0003\u0018\u0003",
    "\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003",
    "\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0003\u0018\u0005\u0018\u0389",
    "\n\u0018\u0003\u0018\u0003\u0018\u0005\u0018\u038d\n\u0018\u0003\u0018",
    "\u0003\u0018\u0003\u0018\u0003\u0018\u0005\u0018\u0393\n\u0018\u0005",
    "\u0018\u0395\n\u0018\u0003\u0018\u0005\u0018\u0398\n\u0018\u0003\u0019",
    "\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0005\u0019",
    "\u03a0\n\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0005",
    "\u0019\u03a6\n\u0019\u0003\u0019\u0003\u0019\u0003\u0019\u0005\u0019",
    "\u03ab\n\u0019\u0003\u0019\u0005\u0019\u03ae\n\u0019\u0003\u001a\u0003",
    "\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0005",
    "\u001a\u03b7\n\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a",
    "\u0007\u001a\u03bd\n\u001a\f\u001a\u000e\u001a\u03c0\u000b\u001a\u0005",
    "\u001a\u03c2\n\u001a\u0003\u001a\u0003\u001a\u0003\u001a\u0003\u001a",
    "\u0003\u001a\u0005\u001a\u03c9\n\u001a\u0003\u001a\u0005\u001a\u03cc",
    "\n\u001a\u0003\u001b\u0003\u001b\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c\u0003\u001c",
    "\u0005\u001c\u03f1\n\u001c\u0003\u001c\u0005\u001c\u03f4\n\u001c\u0003",
    "\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0005\u001d\u03fa\n\u001d",
    "\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d",
    "\u0003\u001d\u0003\u001d\u0003\u001d\u0003\u001d\u0005\u001d\u0406\n",
    "\u001d\u0005\u001d\u0408\n\u001d\u0003\u001d\u0005\u001d\u040b\n\u001d",
    "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e",
    "\u0003\u001e\u0003\u001e\u0003\u001e\u0003\u001e\u0005\u001e\u0423\n",
    "\u001e\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003",
    "\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0005\u001f\u042e\n\u001f",
    "\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f\u0003\u001f",
    "\u0005\u001f\u0436\n\u001f\u0003 \u0003 \u0003 \u0003 \u0003 \u0003",
    " \u0003 \u0007 \u043f\n \f \u000e \u0442\u000b \u0007 \u0444\n \f \u000e",
    " \u0447\u000b \u0005 \u0449\n \u0003!\u0003!\u0003!\u0003!\u0003!\u0003",
    "!\u0005!\u0451\n!\u0003\"\u0003\"\u0003\"\u0003\"\u0003#\u0003#\u0003",
    "#\u0003#\u0005#\u045b\n#\u0003$\u0003$\u0003$\u0003%\u0003%\u0003%\u0003",
    "&\u0003&\u0003\'\u0003\'\u0003(\u0003(\u0003)\u0003)\u0003)\u0003)\u0003",
    "*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0003*\u0005*\u0475\n*\u0003",
    "*\u0003*\u0003*\u0003*\u0005*\u047b\n*\u0003*\u0003*\u0003*\u0003*\u0003",
    "*\u0003*\u0003*\u0003*\u0003*\u0005*\u0486\n*\u0003+\u0003+\u0003+\u0003",
    ",\u0003,\u0003,\u0003-\u0003-\u0003-\u0003-\u0003-\u0003-\u0005-\u0494",
    "\n-\u0003.\u0003.\u0003.\u0003.\u0003.\u0003.\u0005.\u049c\n.\u0003",
    "/\u0003/\u0003/\u0003/\u0003/\u0005/\u04a3\n/\u00030\u00030\u00030\u0003",
    "0\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u0003",
    "0\u00030\u00030\u00030\u00030\u00030\u00030\u00030\u00050\u04ba\n0\u0003",
    "1\u00031\u00031\u00031\u00031\u00032\u00032\u00032\u00032\u00032\u0003",
    "2\u00052\u04c7\n2\u00033\u00033\u00033\u00033\u00053\u04cd\n3\u0003",
    "3\u00033\u00033\u00053\u04d2\n3\u00033\u00053\u04d5\n3\u00034\u0003",
    "4\u00034\u00034\u00054\u04db\n4\u00034\u00034\u00054\u04df\n4\u0003",
    "5\u00035\u00035\u00035\u00035\u00055\u04e6\n5\u00035\u00035\u00035\u0003",
    "6\u00036\u00036\u00036\u00056\u04ef\n6\u00036\u00036\u00056\u04f3\n",
    "6\u00037\u00037\u00037\u00037\u00057\u04f9\n7\u00037\u00037\u00037\u0007",
    "7\u04fe\n7\f7\u000e7\u0501\u000b7\u00037\u00057\u0504\n7\u00038\u0003",
    "8\u00038\u00038\u00038\u00038\u00038\u00039\u00039\u00039\u00039\u0005",
    "9\u0511\n9\u00039\u00039\u0003:\u0003:\u0005:\u0517\n:\u0003;\u0003",
    ";\u0003;\u0003;\u0003;\u0003;\u0003;\u0003<\u0003<\u0003<\u0003<\u0003",
    "<\u0003<\u0003<\u0003<\u0005<\u0528\n<\u0003<\u0003<\u0005<\u052c\n",
    "<\u0003<\u0003<\u0003<\u0003=\u0003=\u0003=\u0005=\u0534\n=\u0003=\u0003",
    "=\u0005=\u0538\n=\u0003=\u0003=\u0003=\u0003=\u0007=\u053e\n=\f=\u000e",
    "=\u0541\u000b=\u0003=\u0005=\u0544\n=\u0005=\u0546\n=\u0003>\u0003>",
    "\u0005>\u054a\n>\u0003>\u0003>\u0005>\u054e\n>\u0003>\u0003>\u0005>",
    "\u0552\n>\u0003>\u0003>\u0005>\u0556\n>\u0003>\u0003>\u0003>\u0003>",
    "\u0005>\u055c\n>\u0003>\u0003>\u0005>\u0560\n>\u0005>\u0562\n>\u0003",
    "?\u0003?\u0003?\u0005?\u0567\n?\u0003?\u0003?\u0003?\u0003?\u0007?\u056d",
    "\n?\f?\u000e?\u0570\u000b?\u0005?\u0572\n?\u0003?\u0005?\u0575\n?\u0003",
    "?\u0003?\u0003?\u0003?\u0003?\u0007?\u057c\n?\f?\u000e?\u057f\u000b",
    "?\u0003?\u0003?\u0005?\u0583\n?\u0003?\u0003?\u0003?\u0005?\u0588\n",
    "?\u0003?\u0005?\u058b\n?\u0005?\u058d\n?\u0003@\u0003@\u0005@\u0591",
    "\n@\u0003@\u0003@\u0005@\u0595\n@\u0003@\u0005@\u0598\n@\u0003@\u0003",
    "@\u0005@\u059c\n@\u0003A\u0003A\u0003B\u0003B\u0005B\u05a2\nB\u0003",
    "B\u0003B\u0003B\u0005B\u05a7\nB\u0003B\u0003B\u0003B\u0003B\u0003B\u0005",
    "B\u05ae\nB\u0005B\u05b0\nB\u0003B\u0003B\u0005B\u05b4\nB\u0003B\u0003",
    "B\u0003B\u0003B\u0003B\u0005B\u05bb\nB\u0003B\u0003B\u0005B\u05bf\n",
    "B\u0003B\u0005B\u05c2\nB\u0003B\u0003B\u0003B\u0003B\u0003B\u0003B\u0003",
    "B\u0005B\u05cb\nB\u0003B\u0005B\u05ce\nB\u0005B\u05d0\nB\u0003C\u0003",
    "C\u0003C\u0003C\u0003C\u0003C\u0003C\u0005C\u05d9\nC\u0003C\u0003C\u0003",
    "C\u0003C\u0003C\u0003C\u0003C\u0003C\u0003C\u0005C\u05e4\nC\u0003C\u0003",
    "C\u0005C\u05e8\nC\u0005C\u05ea\nC\u0005C\u05ec\nC\u0003D\u0003D\u0003",
    "D\u0003D\u0005D\u05f2\nD\u0003D\u0003D\u0003D\u0005D\u05f7\nD\u0003",
    "D\u0003D\u0003D\u0003D\u0003D\u0005D\u05fe\nD\u0003D\u0003D\u0003D\u0003",
    "D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0003D\u0005D\u060b\nD\u0005",
    "D\u060d\nD\u0005D\u060f\nD\u0003D\u0005D\u0612\nD\u0003D\u0005D\u0615",
    "\nD\u0003E\u0003E\u0003E\u0003E\u0003E\u0005E\u061c\nE\u0003E\u0005",
    "E\u061f\nE\u0003E\u0003E\u0003E\u0003E\u0005E\u0625\nE\u0003E\u0003",
    "E\u0003E\u0005E\u062a\nE\u0005E\u062c\nE\u0003E\u0005E\u062f\nE\u0003",
    "E\u0003E\u0003E\u0003E\u0005E\u0635\nE\u0003E\u0003E\u0003E\u0003E\u0003",
    "E\u0003E\u0005E\u063d\nE\u0005E\u063f\nE\u0003E\u0005E\u0642\nE\u0003",
    "E\u0003E\u0005E\u0646\nE\u0003E\u0005E\u0649\nE\u0003E\u0003E\u0003",
    "E\u0003E\u0005E\u064f\nE\u0003E\u0005E\u0652\nE\u0003E\u0003E\u0005",
    "E\u0656\nE\u0003E\u0005E\u0659\nE\u0003E\u0003E\u0003E\u0003E\u0005",
    "E\u065f\nE\u0003E\u0005E\u0662\nE\u0005E\u0664\nE\u0003F\u0003F\u0005",
    "F\u0668\nF\u0003G\u0003G\u0003G\u0005G\u066d\nG\u0003H\u0003H\u0003",
    "H\u0003H\u0003I\u0003I\u0005I\u0675\nI\u0003I\u0003I\u0003I\u0005I\u067a",
    "\nI\u0003J\u0003J\u0003J\u0003J\u0003J\u0003K\u0003K\u0005K\u0683\n",
    "K\u0003K\u0007K\u0686\nK\fK\u000eK\u0689\u000bK\u0003L\u0003L\u0005",
    "L\u068d\nL\u0003M\u0003M\u0003M\u0003M\u0005M\u0693\nM\u0003M\u0003",
    "M\u0005M\u0697\nM\u0003M\u0005M\u069a\nM\u0003M\u0003M\u0005M\u069e",
    "\nM\u0003M\u0003M\u0003M\u0003M\u0005M\u06a4\nM\u0003M\u0003M\u0003",
    "M\u0003M\u0003M\u0003M\u0005M\u06ac\nM\u0003M\u0003M\u0003M\u0005M\u06b1",
    "\nM\u0005M\u06b3\nM\u0003M\u0005M\u06b6\nM\u0003M\u0007M\u06b9\nM\f",
    "M\u000eM\u06bc\u000bM\u0003N\u0003N\u0005N\u06c0\nN\u0003N\u0005N\u06c3",
    "\nN\u0003N\u0003N\u0003N\u0005N\u06c8\nN\u0003N\u0005N\u06cb\nN\u0003",
    "N\u0005N\u06ce\nN\u0003N\u0003N\u0003N\u0003N\u0005N\u06d4\nN\u0003",
    "N\u0003N\u0003N\u0003N\u0005N\u06da\nN\u0003O\u0003O\u0005O\u06de\n",
    "O\u0003O\u0003O\u0003O\u0005O\u06e3\nO\u0003O\u0005O\u06e6\nO\u0003",
    "O\u0003O\u0003O\u0005O\u06eb\nO\u0003O\u0003O\u0005O\u06ef\nO\u0003",
    "O\u0003O\u0005O\u06f3\nO\u0003O\u0003O\u0003O\u0003O\u0005O\u06f9\n",
    "O\u0003O\u0003O\u0003O\u0003O\u0005O\u06ff\nO\u0003P\u0003P\u0003P\u0003",
    "P\u0003P\u0007P\u0706\nP\fP\u000eP\u0709\u000bP\u0003P\u0003P\u0003",
    "Q\u0003Q\u0003Q\u0003Q\u0003Q\u0005Q\u0712\nQ\u0003R\u0003R\u0003R\u0003",
    "R\u0003R\u0003R\u0003R\u0003R\u0005R\u071c\nR\u0005R\u071e\nR\u0005",
    "R\u0720\nR\u0003R\u0005R\u0723\nR\u0003R\u0005R\u0726\nR\u0003R\u0003",
    "R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0003R\u0005R\u0731\nR\u0005",
    "R\u0733\nR\u0005R\u0735\nR\u0003R\u0005R\u0738\nR\u0003S\u0005S\u073b",
    "\nS\u0003S\u0005S\u073e\nS\u0003S\u0005S\u0741\nS\u0003S\u0005S\u0744",
    "\nS\u0003S\u0005S\u0747\nS\u0003S\u0003S\u0003S\u0003T\u0003T\u0003",
    "T\u0003T\u0003T\u0003T\u0003T\u0005T\u0753\nT\u0003T\u0005T\u0756\n",
    "T\u0003T\u0005T\u0759\nT\u0003T\u0003T\u0003T\u0003T\u0003T\u0007T\u0760",
    "\nT\fT\u000eT\u0763\u000bT\u0005T\u0765\nT\u0003T\u0005T\u0768\nT\u0003",
    "U\u0003U\u0003U\u0003U\u0003U\u0005U\u076f\nU\u0003U\u0005U\u0772\n",
    "U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003U\u0003",
    "U\u0003U\u0003U\u0005U\u0780\nU\u0003U\u0005U\u0783\nU\u0003U\u0003",
    "U\u0003U\u0003U\u0003U\u0005U\u078a\nU\u0003U\u0003U\u0003U\u0003U\u0003",
    "U\u0003U\u0003U\u0003U\u0003U\u0005U\u0795\nU\u0003V\u0003V\u0005V\u0799",
    "\nV\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0006",
    "W\u07a4\nW\rW\u000eW\u07a5\u0003W\u0003W\u0005W\u07aa\nW\u0003W\u0003",
    "W\u0003W\u0003W\u0006W\u07b0\nW\rW\u000eW\u07b1\u0003W\u0003W\u0005",
    "W\u07b6\nW\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003",
    "W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0005W\u07c8\nW\u0003",
    "W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003W\u0003",
    "W\u0003W\u0003W\u0007W\u07d7\nW\fW\u000eW\u07da\u000bW\u0003X\u0003",
    "X\u0003X\u0003X\u0003X\u0003X\u0003X\u0003X\u0005X\u07e4\nX\u0003Y\u0003",
    "Y\u0003Z\u0003Z\u0003Z\u0005Z\u07eb\nZ\u0003Z\u0003Z\u0003Z\u0007Z\u07f0",
    "\nZ\fZ\u000eZ\u07f3\u000bZ\u0003[\u0003[\u0003[\u0003[\u0003[\u0005",
    "[\u07fa\n[\u0003[\u0003[\u0003[\u0003[\u0003[\u0003\\\u0003\\\u0005",
    "\\\u0803\n\\\u0003\\\u0003\\\u0005\\\u0807\n\\\u0003\\\u0003\\\u0003",
    "\\\u0003\\\u0003\\\u0003\\\u0003\\\u0003\\\u0005\\\u0811\n\\\u0003]",
    "\u0003]\u0003]\u0007]\u0816\n]\f]\u000e]\u0819\u000b]\u0003^\u0003^",
    "\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0003^\u0007^\u0824\n^\f",
    "^\u000e^\u0827\u000b^\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003",
    "_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003",
    "_\u0003_\u0003_\u0003_\u0005_\u083d\n_\u0003_\u0003_\u0003_\u0003_\u0003",
    "_\u0003_\u0003_\u0005_\u0846\n_\u0003_\u0003_\u0003_\u0003_\u0005_\u084c",
    "\n_\u0003_\u0003_\u0003_\u0003_\u0005_\u0852\n_\u0003_\u0003_\u0003",
    "_\u0003_\u0005_\u0858\n_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003_\u0003",
    "_\u0003_\u0003_\u0005_\u0863\n_\u0003`\u0003`\u0003`\u0003`\u0003`\u0005",
    "`\u086a\n`\u0003`\u0007`\u086d\n`\f`\u000e`\u0870\u000b`\u0003a\u0003",
    "a\u0005a\u0874\na\u0003a\u0003a\u0005a\u0878\na\u0003a\u0003a\u0003",
    "a\u0003a\u0003a\u0006a\u087f\na\ra\u000ea\u0880\u0005a\u0883\na\u0003",
    "b\u0003b\u0005b\u0887\nb\u0003b\u0005b\u088a\nb\u0003b\u0003b\u0003",
    "b\u0005b\u088f\nb\u0003b\u0003b\u0005b\u0893\nb\u0003b\u0003b\u0005",
    "b\u0897\nb\u0003b\u0003b\u0003b\u0003b\u0003b\u0007b\u089e\nb\fb\u000e",
    "b\u08a1\u000bb\u0005b\u08a3\nb\u0003b\u0003b\u0005b\u08a7\nb\u0003c",
    "\u0003c\u0003c\u0005c\u08ac\nc\u0003c\u0003c\u0005c\u08b0\nc\u0003d",
    "\u0003d\u0003d\u0003d\u0003d\u0007d\u08b7\nd\fd\u000ed\u08ba\u000bd",
    "\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0003d\u0005",
    "d\u08c5\nd\u0005d\u08c7\nd\u0003e\u0003e\u0003e\u0003e\u0003e\u0003",
    "e\u0005e\u08cf\ne\u0003e\u0003e\u0003e\u0003e\u0003e\u0003e\u0005e\u08d7",
    "\ne\u0003e\u0005e\u08da\ne\u0005e\u08dc\ne\u0003f\u0003f\u0003f\u0003",
    "f\u0003f\u0005f\u08e3\nf\u0003g\u0003g\u0005g\u08e7\ng\u0003h\u0003",
    "h\u0003i\u0003i\u0003i\u0003i\u0003i\u0007i\u08f0\ni\fi\u000ei\u08f3",
    "\u000bi\u0003i\u0003i\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003",
    "j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003",
    "j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003",
    "j\u0007j\u0912\nj\fj\u000ej\u0915\u000bj\u0003j\u0003j\u0003j\u0003",
    "j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0003j\u0005",
    "j\u0924\nj\u0003k\u0003k\u0003k\u0003k\u0005k\u092a\nk\u0003l\u0003",
    "l\u0003l\u0007l\u092f\nl\fl\u000el\u0932\u000bl\u0003m\u0003m\u0003",
    "m\u0005m\u0937\nm\u0003m\u0003m\u0003m\u0005m\u093c\nm\u0003m\u0003",
    "m\u0003m\u0003m\u0003m\u0003m\u0005m\u0944\nm\u0003m\u0005m\u0947\n",
    "m\u0005m\u0949\nm\u0003n\u0003n\u0003n\u0007n\u094e\nn\fn\u000en\u0951",
    "\u000bn\u0003o\u0003o\u0003o\u0003o\u0003o\u0005o\u0958\no\u0003p\u0003",
    "p\u0007p\u095c\np\fp\u000ep\u095f\u000bp\u0003q\u0003q\u0005q\u0963",
    "\nq\u0003q\u0003q\u0005q\u0967\nq\u0003q\u0003q\u0003q\u0005q\u096c",
    "\nq\u0005q\u096e\nq\u0003q\u0003q\u0003q\u0003q\u0003q\u0005q\u0975",
    "\nq\u0003q\u0003q\u0005q\u0979\nq\u0003q\u0003q\u0003q\u0003q\u0003",
    "q\u0005q\u0980\nq\u0005q\u0982\nq\u0005q\u0984\nq\u0003r\u0003r\u0003",
    "r\u0003r\u0003r\u0003r\u0003r\u0003r\u0003s\u0005s\u098f\ns\u0003s\u0003",
    "s\u0005s\u0993\ns\u0005s\u0995\ns\u0003s\u0005s\u0998\ns\u0003s\u0003",
    "s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003s\u0003",
    "s\u0003s\u0003s\u0005s\u09a8\ns\u0003t\u0003t\u0005t\u09ac\nt\u0003",
    "u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003u\u0003",
    "u\u0003u\u0003u\u0003u\u0003u\u0003u\u0007u\u09be\nu\fu\u000eu\u09c1",
    "\u000bu\u0003u\u0005u\u09c4\nu\u0003u\u0003u\u0005u\u09c8\nu\u0003v",
    "\u0003v\u0003v\u0003v\u0003w\u0003w\u0003w\u0003w\u0003w\u0005w\u09d3",
    "\nw\u0003x\u0003x\u0003x\u0003x\u0003x\u0005x\u09da\nx\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0005x\u09f0",
    "\nx\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003",
    "x\u0005x\u0a24\nx\u0003x\u0003x\u0005x\u0a28\nx\u0003x\u0003x\u0003",
    "x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0003x\u0005",
    "x\u0a36\nx\u0003y\u0003y\u0003y\u0003y\u0003y\u0003z\u0003z\u0003z\u0003",
    "z\u0003z\u0003{\u0005{\u0a43\n{\u0003{\u0003{\u0003|\u0003|\u0005|\u0a49",
    "\n|\u0003}\u0005}\u0a4c\n}\u0003}\u0003}\u0003}\u0003}\u0007}\u0a52",
    "\n}\f}\u000e}\u0a55\u000b}\u0003}\u0003}\u0003~\u0003~\u0003~\u0003",
    "~\u0003~\u0007~\u0a5e\n~\f~\u000e~\u0a61\u000b~\u0003~\u0003~\u0003",
    "\u007f\u0005\u007f\u0a66\n\u007f\u0003\u007f\u0003\u007f\u0003\u007f",
    "\u0003\u007f\u0003\u007f\u0007\u007f\u0a6d\n\u007f\f\u007f\u000e\u007f",
    "\u0a70\u000b\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003",
    "\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003",
    "\u007f\u0003\u007f\u0007\u007f\u0a7e\n\u007f\f\u007f\u000e\u007f\u0a81",
    "\u000b\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0005\u007f\u0a86\n",
    "\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003\u007f\u0003",
    "\u007f\u0005\u007f\u0a8e\n\u007f\u0003\u0080\u0003\u0080\u0005\u0080",
    "\u0a92\n\u0080\u0003\u0081\u0003\u0081\u0003\u0081\u0003\u0081\u0007",
    "\u0081\u0a98\n\u0081\f\u0081\u000e\u0081\u0a9b\u000b\u0081\u0003\u0081",
    "\u0003\u0081\u0003\u0082\u0003\u0082\u0005\u0082\u0aa1\n\u0082\u0003",
    "\u0083\u0003\u0083\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003",
    "\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0003\u0084\u0007\u0084\u0aae",
    "\n\u0084\f\u0084\u000e\u0084\u0ab1\u000b\u0084\u0003\u0085\u0003\u0085",
    "\u0003\u0085\u0007\u0085\u0ab6\n\u0085\f\u0085\u000e\u0085\u0ab9\u000b",
    "\u0085\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0003",
    "\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0003\u0086\u0005\u0086\u0ac5",
    "\n\u0086\u0003\u0087\u0003\u0087\u0003\u0087\u0005\u0087\u0aca\n\u0087",
    "\u0003\u0087\u0003\u0087\u0003\u0087\u0005\u0087\u0acf\n\u0087\u0003",
    "\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0005\u0087\u0ad5\n\u0087",
    "\u0003\u0087\u0005\u0087\u0ad8\n\u0087\u0003\u0087\u0003\u0087\u0005",
    "\u0087\u0adc\n\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0005\u0087",
    "\u0ae1\n\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003",
    "\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003\u0087\u0003",
    "\u0087\u0003\u0087\u0003\u0087\u0005\u0087\u0af0\n\u0087\u0003\u0088",
    "\u0003\u0088\u0003\u0089\u0003\u0089\u0003\u0089\u0003\u0089\u0003\u0089",
    "\u0005\u0089\u0af9\n\u0089\u0003\u0089\u0005\u0089\u0afc\n\u0089\u0003",
    "\u0089\u0005\u0089\u0aff\n\u0089\u0003\u0089\u0003\u0089\u0003\u008a",
    "\u0003\u008a\u0003\u008a\u0003\u008b\u0003\u008b\u0003\u008b\u0003\u008b",
    "\u0003\u008b\u0003\u008b\u0005\u008b\u0b0c\n\u008b\u0003\u008c\u0003",
    "\u008c\u0005\u008c\u0b10\n\u008c\u0003\u008d\u0003\u008d\u0003\u008d",
    "\u0003\u008d\u0003\u008d\u0003\u008d\u0005\u008d\u0b18\n\u008d\u0003",
    "\u008e\u0003\u008e\u0003\u008e\u0003\u008e\u0005\u008e\u0b1e\n\u008e",
    "\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0007\u008f\u0b24\n",
    "\u008f\f\u008f\u000e\u008f\u0b27\u000b\u008f\u0003\u008f\u0003\u008f",
    "\u0003\u008f\u0003\u008f\u0005\u008f\u0b2d\n\u008f\u0003\u008f\u0003",
    "\u008f\u0003\u008f\u0003\u008f\u0005\u008f\u0b33\n\u008f\u0003\u008f",
    "\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f",
    "\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f\u0003\u008f",
    "\u0005\u008f\u0b42\n\u008f\u0003\u0090\u0003\u0090\u0003\u0090\u0003",
    "\u0090\u0003\u0090\u0003\u0090\u0003\u0090\u0005\u0090\u0b4b\n\u0090",
    "\u0003\u0090\u0003\u0090\u0003\u0091\u0003\u0091\u0005\u0091\u0b51\n",
    "\u0091\u0003\u0092\u0003\u0092\u0003\u0092\u0003\u0092\u0005\u0092\u0b57",
    "\n\u0092\u0003\u0092\u0005\u0092\u0b5a\n\u0092\u0003\u0092\u0003\u0092",
    "\u0005\u0092\u0b5e\n\u0092\u0003\u0092\u0003\u0092\u0003\u0092\u0007",
    "\u0092\u0b63\n\u0092\f\u0092\u000e\u0092\u0b66\u000b\u0092\u0003\u0093",
    "\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0005\u0093\u0b6d\n",
    "\u0093\u0003\u0093\u0005\u0093\u0b70\n\u0093\u0003\u0093\u0003\u0093",
    "\u0003\u0093\u0003\u0093\u0005\u0093\u0b76\n\u0093\u0003\u0093\u0003",
    "\u0093\u0003\u0093\u0003\u0093\u0005\u0093\u0b7c\n\u0093\u0005\u0093",
    "\u0b7e\n\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0005",
    "\u0093\u0b84\n\u0093\u0003\u0093\u0005\u0093\u0b87\n\u0093\u0005\u0093",
    "\u0b89\n\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0003\u0093\u0005",
    "\u0093\u0b8f\n\u0093\u0005\u0093\u0b91\n\u0093\u0003\u0093\u0003\u0093",
    "\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094",
    "\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0005\u0094\u0b9f\n",
    "\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0003\u0094\u0005",
    "\u0094\u0ba6\n\u0094\u0003\u0094\u0003\u0094\u0003\u0095\u0003\u0095",
    "\u0003\u0095\u0005\u0095\u0bad\n\u0095\u0003\u0095\u0003\u0095\u0003",
    "\u0095\u0003\u0095\u0003\u0095\u0005\u0095\u0bb4\n\u0095\u0003\u0095",
    "\u0003\u0095\u0003\u0096\u0003\u0096\u0003\u0096\u0005\u0096\u0bbb\n",
    "\u0096\u0003\u0096\u0003\u0096\u0003\u0097\u0003\u0097\u0003\u0097\u0005",
    "\u0097\u0bc2\n\u0097\u0003\u0097\u0003\u0097\u0003\u0097\u0003\u0097",
    "\u0003\u0097\u0005\u0097\u0bc9\n\u0097\u0003\u0097\u0003\u0097\u0003",
    "\u0098\u0003\u0098\u0005\u0098\u0bcf\n\u0098\u0003\u0099\u0003\u0099",
    "\u0003\u0099\u0005\u0099\u0bd4\n\u0099\u0003\u0099\u0003\u0099\u0003",
    "\u009a\u0003\u009a\u0003\u009a\u0007\u009a\u0bdb\n\u009a\f\u009a\u000e",
    "\u009a\u0bde\u000b\u009a\u0003\u009b\u0003\u009b\u0005\u009b\u0be2\n",
    "\u009b\u0003\u009c\u0003\u009c\u0003\u009d\u0003\u009d\u0003\u009e\u0005",
    "\u009e\u0be9\n\u009e\u0003\u009e\u0003\u009e\u0003\u009f\u0003\u009f",
    "\u0003\u009f\u0003\u009f\u0003\u009f\u0005\u009f\u0bf2\n\u009f\u0003",
    "\u00a0\u0003\u00a0\u0005\u00a0\u0bf6\n\u00a0\u0003\u00a0\u0003\u00a0",
    "\u0003\u00a0\u0003\u00a0\u0005\u00a0\u0bfc\n\u00a0\u0003\u00a0\u0005",
    "\u00a0\u0bff\n\u00a0\u0003\u00a1\u0003\u00a1\u0005\u00a1\u0c03\n\u00a1",
    "\u0003\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2\u0c08\n\u00a2\u0003",
    "\u00a2\u0003\u00a2\u0005\u00a2\u0c0c\n\u00a2\u0003\u00a2\u0003\u00a2",
    "\u0005\u00a2\u0c10\n\u00a2\u0003\u00a2\u0003\u00a2\u0005\u00a2\u0c14",
    "\n\u00a2\u0003\u00a3\u0003\u00a3\u0003\u00a4\u0003\u00a4\u0003\u00a4",
    "\u0005\u00a4\u0c1b\n\u00a4\u0003\u00a5\u0003\u00a5\u0003\u00a6\u0003",
    "\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003",
    "\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003\u00a6\u0003",
    "\u00a6\u0003\u00a6\u0005\u00a6\u0c2e\n\u00a6\u0003\u00a7\u0003\u00a7",
    "\u0003\u00a8\u0003\u00a8\u0005\u00a8\u0c34\n\u00a8\u0003\u00a8\u0002",
    "\u0004\u00ac\u00ba\u00a9\u0002\u0004\u0006\b\n\f\u000e\u0010\u0012\u0014",
    "\u0016\u0018\u001a\u001c\u001e \"$&(*,.02468:<>@BDFHJLNPRTVXZ\\^`bd",
    "fhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090",
    "\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8",
    "\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0",
    "\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8",
    "\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0",
    "\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108",
    "\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120",
    "\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138",
    "\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0002",
    "<\u0003\u0002\u0194\u0195\u0004\u0002\u0194\u0194\u0197\u0197\u0004",
    "\u0002\u00f2\u00f2\u017a\u017a\u0004\u0002\u0194\u0195\u0197\u0197\u0004",
    "\u0002ll~~\u0004\u0002\n\n55\u0003\u0002\u0085\u0086\u0004\u0002\u0144",
    "\u0145\u0151\u0151\u0004\u0002\u007f\u007f\u0160\u0160\u0005\u0002\u00fd",
    "\u00fd\u0163\u0163\u018a\u018a\u0005\u0002\u00a6\u00a6\u00cd\u00cd\u00f7",
    "\u00f7\u0004\u0002qqss\u0005\u0002\u00ee\u00ee\u0113\u0113\u012d\u012d",
    "\u0004\u0002\u010c\u010c\u0121\u0121\u0005\u0002\u00fb\u00fb\u013e\u013e",
    "\u0140\u0140\u0003\u0002\u0153\u0154\u0005\u0002\u0131\u0131\u015b\u015b",
    "\u016b\u016b\u0005\u0002\u00c5\u00c5\u00f8\u00f8\u0108\u0108\u0004\u0002",
    "\u0108\u0108\u016a\u016a\u0005\u0002OO\u00d7\u00d7\u016a\u016a\u0005",
    "\u0002ll\u00dd\u00dd\u017b\u017b\u0004\u0002\u012d\u012d\u0166\u0166",
    "\u0004\u0002\u00b8\u00b8\u0123\u0123\u0003\u0002\u0144\u0145\u0004\u0002",
    "\u00a6\u00a6\u00bb\u00bb\u0003\u0002\u00ac\u00ad\u0006\u0002\u00d8\u00d8",
    "\u0146\u0146\u0167\u0167\u0197\u0197\u0004\u0002\u0109\u0109\u0164\u0164",
    "\u0006\u0002\u00fa\u00fa\u0101\u0101\u011e\u011e\u016f\u016f\u0005\u0002",
    "\u0142\u0142\u0153\u0153\u0165\u0165\u0004\u0002\u00c3\u00c3\u0158\u0158",
    "\u0003\u0002\u01b4\u01b5\u0003\u0002\u01b1\u01b3\u0004\u0002\u01b4\u01b5",
    "\u01b7\u01b9\u0005\u0002\u0005\u0005\b\b\u00a3\u00a3\u0004\u0002\u0005",
    "\u000577\u0004\u0002\u015e\u015e\u0160\u0160\u0004\u0002\u0105\u0105",
    "\u0135\u0135\u0004\u0002{{\u0111\u0111\u0005\u0002hh\u00e1\u00e1\u0111",
    "\u0111\u0005\u0002hh\u0111\u0111\u0124\u0124\u0004\u0002UU\u015f\u015f",
    "\u0004\u0002nn\u0194\u0195\u0005\u0002OOcc\u0093\u0093\u0006\u0002h",
    "h\u0111\u0111\u0124\u0124\u0159\u0159\u0004\u0002\u0195\u0195\u0197",
    "\u0197\u0005\u0002\u00f5\u00f5\u0150\u0150\u0161\u0161\u0007\u0002\u00d4",
    "\u00d4\u0126\u0126\u012c\u012c\u0171\u0173\u0187\u0188\u0003\u0002\u00e5",
    "\u00e6\u0004\u0002\u014f\u014f\u0160\u0160\u0005\u0002OOqq\u0153\u0153",
    "\u0004\u0002\u001a\u001akk\u0004\u0002\u0126\u0126\u0195\u0195\u0003",
    "\u0002\u0199\u019a\u0004\u0002\u0195\u0195\u0199\u0199-\u0002JJ\u00c3",
    "\u00c3\u00cb\u00cb\u00cd\u00cd\u00d4\u00d5\u00d8\u00da\u00de\u00df\u00e1",
    "\u00e1\u00e3\u00e6\u00f2\u00f2\u00f4\u00f5\u00f7\u00f7\u00fa\u00fa\u00fd",
    "\u00fd\u00ff\u0101\u0105\u010a\u010c\u010f\u0111\u0111\u0114\u0114\u0116",
    "\u0116\u0118\u011a\u011c\u0128\u012c\u012c\u0130\u0130\u0132\u0132\u0135",
    "\u0137\u0139\u0139\u013b\u013c\u013f\u0146\u0148\u014d\u014f\u0151\u0153",
    "\u0153\u0155\u0155\u0158\u015a\u015c\u0165\u0167\u0168\u016a\u016a\u016c",
    "\u0173\u0177\u017a\u017e\u017e\u0180\u0184\u0186\u018d\u0196\u0196\u0003",
    "\u0002\u019f\u01a6\u0007\u0002\u010b\u010b\u011b\u011b\u012a\u012a\u0176",
    "\u0176\u01b3\u01b3\u0e3f\u0002\u0153\u0003\u0002\u0002\u0002\u0004\u0158",
    "\u0003\u0002\u0002\u0002\u0006\u0160\u0003\u0002\u0002\u0002\b\u0168",
    "\u0003\u0002\u0002\u0002\n\u016e\u0003\u0002\u0002\u0002\f\u017f\u0003",
    "\u0002\u0002\u0002\u000e\u01fe\u0003\u0002\u0002\u0002\u0010\u0207\u0003",
    "\u0002\u0002\u0002\u0012\u020a\u0003\u0002\u0002\u0002\u0014\u0240\u0003",
    "\u0002\u0002\u0002\u0016\u0243\u0003\u0002\u0002\u0002\u0018\u0271\u0003",
    "\u0002\u0002\u0002\u001a\u0274\u0003\u0002\u0002\u0002\u001c\u0284\u0003",
    "\u0002\u0002\u0002\u001e\u02bf\u0003\u0002\u0002\u0002 \u02d7\u0003",
    "\u0002\u0002\u0002\"\u02ea\u0003\u0002\u0002\u0002$\u02ec\u0003\u0002",
    "\u0002\u0002&\u031d\u0003\u0002\u0002\u0002(\u0338\u0003\u0002\u0002",
    "\u0002*\u0361\u0003\u0002\u0002\u0002,\u0378\u0003\u0002\u0002\u0002",
    ".\u037a\u0003\u0002\u0002\u00020\u0399\u0003\u0002\u0002\u00022\u03af",
    "\u0003\u0002\u0002\u00024\u03cd\u0003\u0002\u0002\u00026\u03cf\u0003",
    "\u0002\u0002\u00028\u03f5\u0003\u0002\u0002\u0002:\u0422\u0003\u0002",
    "\u0002\u0002<\u0435\u0003\u0002\u0002\u0002>\u0437\u0003\u0002\u0002",
    "\u0002@\u0450\u0003\u0002\u0002\u0002B\u0452\u0003\u0002\u0002\u0002",
    "D\u045a\u0003\u0002\u0002\u0002F\u045c\u0003\u0002\u0002\u0002H\u045f",
    "\u0003\u0002\u0002\u0002J\u0462\u0003\u0002\u0002\u0002L\u0464\u0003",
    "\u0002\u0002\u0002N\u0466\u0003\u0002\u0002\u0002P\u0468\u0003\u0002",
    "\u0002\u0002R\u0485\u0003\u0002\u0002\u0002T\u0487\u0003\u0002\u0002",
    "\u0002V\u048a\u0003\u0002\u0002\u0002X\u0493\u0003\u0002\u0002\u0002",
    "Z\u049b\u0003\u0002\u0002\u0002\\\u04a2\u0003\u0002\u0002\u0002^\u04b9",
    "\u0003\u0002\u0002\u0002`\u04bb\u0003\u0002\u0002\u0002b\u04c6\u0003",
    "\u0002\u0002\u0002d\u04c8\u0003\u0002\u0002\u0002f\u04d6\u0003\u0002",
    "\u0002\u0002h\u04e0\u0003\u0002\u0002\u0002j\u04ea\u0003\u0002\u0002",
    "\u0002l\u04f4\u0003\u0002\u0002\u0002n\u0505\u0003\u0002\u0002\u0002",
    "p\u050c\u0003\u0002\u0002\u0002r\u0516\u0003\u0002\u0002\u0002t\u0518",
    "\u0003\u0002\u0002\u0002v\u051f\u0003\u0002\u0002\u0002x\u0545\u0003",
    "\u0002\u0002\u0002z\u0561\u0003\u0002\u0002\u0002|\u058c\u0003\u0002",
    "\u0002\u0002~\u0590\u0003\u0002\u0002\u0002\u0080\u059d\u0003\u0002",
    "\u0002\u0002\u0082\u05cf\u0003\u0002\u0002\u0002\u0084\u05eb\u0003\u0002",
    "\u0002\u0002\u0086\u0614\u0003\u0002\u0002\u0002\u0088\u0663\u0003\u0002",
    "\u0002\u0002\u008a\u0665\u0003\u0002\u0002\u0002\u008c\u0669\u0003\u0002",
    "\u0002\u0002\u008e\u066e\u0003\u0002\u0002\u0002\u0090\u0672\u0003\u0002",
    "\u0002\u0002\u0092\u067b\u0003\u0002\u0002\u0002\u0094\u0680\u0003\u0002",
    "\u0002\u0002\u0096\u068c\u0003\u0002\u0002\u0002\u0098\u068e\u0003\u0002",
    "\u0002\u0002\u009a\u06bf\u0003\u0002\u0002\u0002\u009c\u06dd\u0003\u0002",
    "\u0002\u0002\u009e\u0700\u0003\u0002\u0002\u0002\u00a0\u070c\u0003\u0002",
    "\u0002\u0002\u00a2\u0713\u0003\u0002\u0002\u0002\u00a4\u073a\u0003\u0002",
    "\u0002\u0002\u00a6\u074b\u0003\u0002\u0002\u0002\u00a8\u0794\u0003\u0002",
    "\u0002\u0002\u00aa\u0798\u0003\u0002\u0002\u0002\u00ac\u07c7\u0003\u0002",
    "\u0002\u0002\u00ae\u07e3\u0003\u0002\u0002\u0002\u00b0\u07e5\u0003\u0002",
    "\u0002\u0002\u00b2\u07e7\u0003\u0002\u0002\u0002\u00b4\u07f4\u0003\u0002",
    "\u0002\u0002\u00b6\u0810\u0003\u0002\u0002\u0002\u00b8\u0812\u0003\u0002",
    "\u0002\u0002\u00ba\u081a\u0003\u0002\u0002\u0002\u00bc\u0862\u0003\u0002",
    "\u0002\u0002\u00be\u0869\u0003\u0002\u0002\u0002\u00c0\u0877\u0003\u0002",
    "\u0002\u0002\u00c2\u0884\u0003\u0002\u0002\u0002\u00c4\u08a8\u0003\u0002",
    "\u0002\u0002\u00c6\u08b1\u0003\u0002\u0002\u0002\u00c8\u08db\u0003\u0002",
    "\u0002\u0002\u00ca\u08dd\u0003\u0002\u0002\u0002\u00cc\u08e4\u0003\u0002",
    "\u0002\u0002\u00ce\u08e8\u0003\u0002\u0002\u0002\u00d0\u08ea\u0003\u0002",
    "\u0002\u0002\u00d2\u0923\u0003\u0002\u0002\u0002\u00d4\u0925\u0003\u0002",
    "\u0002\u0002\u00d6\u092b\u0003\u0002\u0002\u0002\u00d8\u0948\u0003\u0002",
    "\u0002\u0002\u00da\u094a\u0003\u0002\u0002\u0002\u00dc\u0957\u0003\u0002",
    "\u0002\u0002\u00de\u0959\u0003\u0002\u0002\u0002\u00e0\u0983\u0003\u0002",
    "\u0002\u0002\u00e2\u0985\u0003\u0002\u0002\u0002\u00e4\u09a7\u0003\u0002",
    "\u0002\u0002\u00e6\u09a9\u0003\u0002\u0002\u0002\u00e8\u09c7\u0003\u0002",
    "\u0002\u0002\u00ea\u09c9\u0003\u0002\u0002\u0002\u00ec\u09d2\u0003\u0002",
    "\u0002\u0002\u00ee\u0a35\u0003\u0002\u0002\u0002\u00f0\u0a37\u0003\u0002",
    "\u0002\u0002\u00f2\u0a3c\u0003\u0002\u0002\u0002\u00f4\u0a42\u0003\u0002",
    "\u0002\u0002\u00f6\u0a46\u0003\u0002\u0002\u0002\u00f8\u0a4b\u0003\u0002",
    "\u0002\u0002\u00fa\u0a58\u0003\u0002\u0002\u0002\u00fc\u0a65\u0003\u0002",
    "\u0002\u0002\u00fe\u0a91\u0003\u0002\u0002\u0002\u0100\u0a93\u0003\u0002",
    "\u0002\u0002\u0102\u0aa0\u0003\u0002\u0002\u0002\u0104\u0aa2\u0003\u0002",
    "\u0002\u0002\u0106\u0aa4\u0003\u0002\u0002\u0002\u0108\u0ab2\u0003\u0002",
    "\u0002\u0002\u010a\u0ac4\u0003\u0002\u0002\u0002\u010c\u0aef\u0003\u0002",
    "\u0002\u0002\u010e\u0af1\u0003\u0002\u0002\u0002\u0110\u0af3\u0003\u0002",
    "\u0002\u0002\u0112\u0b02\u0003\u0002\u0002\u0002\u0114\u0b0b\u0003\u0002",
    "\u0002\u0002\u0116\u0b0f\u0003\u0002\u0002\u0002\u0118\u0b17\u0003\u0002",
    "\u0002\u0002\u011a\u0b1d\u0003\u0002\u0002\u0002\u011c\u0b41\u0003\u0002",
    "\u0002\u0002\u011e\u0b43\u0003\u0002\u0002\u0002\u0120\u0b50\u0003\u0002",
    "\u0002\u0002\u0122\u0b52\u0003\u0002\u0002\u0002\u0124\u0b67\u0003\u0002",
    "\u0002\u0002\u0126\u0ba5\u0003\u0002\u0002\u0002\u0128\u0bb3\u0003\u0002",
    "\u0002\u0002\u012a\u0bba\u0003\u0002\u0002\u0002\u012c\u0bc8\u0003\u0002",
    "\u0002\u0002\u012e\u0bce\u0003\u0002\u0002\u0002\u0130\u0bd3\u0003\u0002",
    "\u0002\u0002\u0132\u0bd7\u0003\u0002\u0002\u0002\u0134\u0be1\u0003\u0002",
    "\u0002\u0002\u0136\u0be3\u0003\u0002\u0002\u0002\u0138\u0be5\u0003\u0002",
    "\u0002\u0002\u013a\u0be8\u0003\u0002\u0002\u0002\u013c\u0bf1\u0003\u0002",
    "\u0002\u0002\u013e\u0bf3\u0003\u0002\u0002\u0002\u0140\u0c02\u0003\u0002",
    "\u0002\u0002\u0142\u0c13\u0003\u0002\u0002\u0002\u0144\u0c15\u0003\u0002",
    "\u0002\u0002\u0146\u0c1a\u0003\u0002\u0002\u0002\u0148\u0c1c\u0003\u0002",
    "\u0002\u0002\u014a\u0c2d\u0003\u0002\u0002\u0002\u014c\u0c2f\u0003\u0002",
    "\u0002\u0002\u014e\u0c31\u0003\u0002\u0002\u0002\u0150\u0152\u0005\u0004",
    "\u0003\u0002\u0151\u0150\u0003\u0002\u0002\u0002\u0152\u0155\u0003\u0002",
    "\u0002\u0002\u0153\u0151\u0003\u0002\u0002\u0002\u0153\u0154\u0003\u0002",
    "\u0002\u0002\u0154\u0156\u0003\u0002\u0002\u0002\u0155\u0153\u0003\u0002",
    "\u0002\u0002\u0156\u0157\u0007\u0002\u0002\u0003\u0157\u0003\u0003\u0002",
    "\u0002\u0002\u0158\u015a\u0005\u0006\u0004\u0002\u0159\u015b\u0005\u008a",
    "F\u0002\u015a\u0159\u0003\u0002\u0002\u0002\u015a\u015b\u0003\u0002",
    "\u0002\u0002\u015b\u0005\u0003\u0002\u0002\u0002\u015c\u015e\u0005\b",
    "\u0005\u0002\u015d\u015f\u0007\u01af\u0002\u0002\u015e\u015d\u0003\u0002",
    "\u0002\u0002\u015e\u015f\u0003\u0002\u0002\u0002\u015f\u0161\u0003\u0002",
    "\u0002\u0002\u0160\u015c\u0003\u0002\u0002\u0002\u0161\u0162\u0003\u0002",
    "\u0002\u0002\u0162\u0160\u0003\u0002\u0002\u0002\u0162\u0163\u0003\u0002",
    "\u0002\u0002\u0163\u0007\u0003\u0002\u0002\u0002\u0164\u0169\u0005\n",
    "\u0006\u0002\u0165\u0169\u0005\f\u0007\u0002\u0166\u0169\u0005\u000e",
    "\b\u0002\u0167\u0169\u0005\u0010\t\u0002\u0168\u0164\u0003\u0002\u0002",
    "\u0002\u0168\u0165\u0003\u0002\u0002\u0002\u0168\u0166\u0003\u0002\u0002",
    "\u0002\u0168\u0167\u0003\u0002\u0002\u0002\u0169\t\u0003\u0002\u0002",
    "\u0002\u016a\u016f\u0005\u0012\n\u0002\u016b\u016f\u0005\u0016\f\u0002",
    "\u016c\u016f\u0005\u001a\u000e\u0002\u016d\u016f\u0005\u001c\u000f\u0002",
    "\u016e\u016a\u0003\u0002\u0002\u0002\u016e\u016b\u0003\u0002\u0002\u0002",
    "\u016e\u016c\u0003\u0002\u0002\u0002\u016e\u016d\u0003\u0002\u0002\u0002",
    "\u016f\u000b\u0003\u0002\u0002\u0002\u0170\u0180\u0005$\u0013\u0002",
    "\u0171\u0180\u0005&\u0014\u0002\u0172\u0180\u0005(\u0015\u0002\u0173",
    "\u0180\u0005.\u0018\u0002\u0174\u0180\u00050\u0019\u0002\u0175\u0180",
    "\u0005n8\u0002\u0176\u0180\u00052\u001a\u0002\u0177\u0180\u00056\u001c",
    "\u0002\u0178\u0180\u00058\u001d\u0002\u0179\u0180\u0005d3\u0002\u017a",
    "\u0180\u0005f4\u0002\u017b\u0180\u0005h5\u0002\u017c\u0180\u0005j6\u0002",
    "\u017d\u0180\u0005p9\u0002\u017e\u0180\u0005l7\u0002\u017f\u0170\u0003",
    "\u0002\u0002\u0002\u017f\u0171\u0003\u0002\u0002\u0002\u017f\u0172\u0003",
    "\u0002\u0002\u0002\u017f\u0173\u0003\u0002\u0002\u0002\u017f\u0174\u0003",
    "\u0002\u0002\u0002\u017f\u0175\u0003\u0002\u0002\u0002\u017f\u0176\u0003",
    "\u0002\u0002\u0002\u017f\u0177\u0003\u0002\u0002\u0002\u017f\u0178\u0003",
    "\u0002\u0002\u0002\u017f\u0179\u0003\u0002\u0002\u0002\u017f\u017a\u0003",
    "\u0002\u0002\u0002\u017f\u017b\u0003\u0002\u0002\u0002\u017f\u017c\u0003",
    "\u0002\u0002\u0002\u017f\u017d\u0003\u0002\u0002\u0002\u017f\u017e\u0003",
    "\u0002\u0002\u0002\u0180\r\u0003\u0002\u0002\u0002\u0181\u0183\u0007",
    "\r\u0002\u0002\u0182\u0184\u0007\u01af\u0002\u0002\u0183\u0182\u0003",
    "\u0002\u0002\u0002\u0183\u0184\u0003\u0002\u0002\u0002\u0184\u0186\u0003",
    "\u0002\u0002\u0002\u0185\u0187\u0005\u0006\u0004\u0002\u0186\u0185\u0003",
    "\u0002\u0002\u0002\u0186\u0187\u0003\u0002\u0002\u0002\u0187\u0188\u0003",
    "\u0002\u0002\u0002\u0188\u018a\u0007=\u0002\u0002\u0189\u018b\u0007",
    "\u01af\u0002\u0002\u018a\u0189\u0003\u0002\u0002\u0002\u018a\u018b\u0003",
    "\u0002\u0002\u0002\u018b\u01ff\u0003\u0002\u0002\u0002\u018c\u018e\u0007",
    "\u000f\u0002\u0002\u018d\u018f\u0007\u01af\u0002\u0002\u018e\u018d\u0003",
    "\u0002\u0002\u0002\u018e\u018f\u0003\u0002\u0002\u0002\u018f\u01ff\u0003",
    "\u0002\u0002\u0002\u0190\u0192\u0007$\u0002\u0002\u0191\u0193\u0007",
    "\u01af\u0002\u0002\u0192\u0191\u0003\u0002\u0002\u0002\u0192\u0193\u0003",
    "\u0002\u0002\u0002\u0193\u01ff\u0003\u0002\u0002\u0002\u0194\u0195\u0007",
    "Q\u0002\u0002\u0195\u0197\u0005\u0146\u00a4\u0002\u0196\u0198\u0007",
    "\u01af\u0002\u0002\u0197\u0196\u0003\u0002\u0002\u0002\u0197\u0198\u0003",
    "\u0002\u0002\u0002\u0198\u01ff\u0003\u0002\u0002\u0002\u0199\u019a\u0005",
    "\u0146\u00a4\u0002\u019a\u019c\u0007\u01b0\u0002\u0002\u019b\u019d\u0007",
    "\u01af\u0002\u0002\u019c\u019b\u0003\u0002\u0002\u0002\u019c\u019d\u0003",
    "\u0002\u0002\u0002\u019d\u01ff\u0003\u0002\u0002\u0002\u019e\u019f\u0007",
    "X\u0002\u0002\u019f\u01a0\u0005\u00ba^\u0002\u01a0\u01a3\u0005\b\u0005",
    "\u0002\u01a1\u01a2\u0007<\u0002\u0002\u01a2\u01a4\u0005\b\u0005\u0002",
    "\u01a3\u01a1\u0003\u0002\u0002\u0002\u01a3\u01a4\u0003\u0002\u0002\u0002",
    "\u01a4\u01a6\u0003\u0002\u0002\u0002\u01a5\u01a7\u0007\u01af\u0002\u0002",
    "\u01a6\u01a5\u0003\u0002\u0002\u0002\u01a6\u01a7\u0003\u0002\u0002\u0002",
    "\u01a7\u01ff\u0003\u0002\u0002\u0002\u01a8\u01aa\u0007\u0090\u0002\u0002",
    "\u01a9\u01ab\u0005\u00acW\u0002\u01aa\u01a9\u0003\u0002\u0002\u0002",
    "\u01aa\u01ab\u0003\u0002\u0002\u0002\u01ab\u01ad\u0003\u0002\u0002\u0002",
    "\u01ac\u01ae\u0007\u01af\u0002\u0002\u01ad\u01ac\u0003\u0002\u0002\u0002",
    "\u01ad\u01ae\u0003\u0002\u0002\u0002\u01ae\u01ff\u0003\u0002\u0002\u0002",
    "\u01af\u01b5\u0007\u0178\u0002\u0002\u01b0\u01b1\t\u0002\u0002\u0002",
    "\u01b1\u01b2\u0007\u01ae\u0002\u0002\u01b2\u01b3\t\u0003\u0002\u0002",
    "\u01b3\u01b4\u0007\u01ae\u0002\u0002\u01b4\u01b6\t\u0002\u0002\u0002",
    "\u01b5\u01b0\u0003\u0002\u0002\u0002\u01b5\u01b6\u0003\u0002\u0002\u0002",
    "\u01b6\u01b8\u0003\u0002\u0002\u0002\u01b7\u01b9\u0007\u01af\u0002\u0002",
    "\u01b8\u01b7\u0003\u0002\u0002\u0002\u01b8\u01b9\u0003\u0002\u0002\u0002",
    "\u01b9\u01ff\u0003\u0002\u0002\u0002\u01ba\u01bb\u0007\r\u0002\u0002",
    "\u01bb\u01bd\u0007\u017e\u0002\u0002\u01bc\u01be\u0007\u01af\u0002\u0002",
    "\u01bd\u01bc\u0003\u0002\u0002\u0002\u01bd\u01be\u0003\u0002\u0002\u0002",
    "\u01be\u01c0\u0003\u0002\u0002\u0002\u01bf\u01c1\u0005\u0006\u0004\u0002",
    "\u01c0\u01bf\u0003\u0002\u0002\u0002\u01c0\u01c1\u0003\u0002\u0002\u0002",
    "\u01c1\u01c2\u0003\u0002\u0002\u0002\u01c2\u01c3\u0007=\u0002\u0002",
    "\u01c3\u01c5\u0007\u017e\u0002\u0002\u01c4\u01c6\u0007\u01af\u0002\u0002",
    "\u01c5\u01c4\u0003\u0002\u0002\u0002\u01c5\u01c6\u0003\u0002\u0002\u0002",
    "\u01c6\u01c7\u0003\u0002\u0002\u0002\u01c7\u01c8\u0007\r\u0002\u0002",
    "\u01c8\u01ca\u0007\u00da\u0002\u0002\u01c9\u01cb\u0007\u01af\u0002\u0002",
    "\u01ca\u01c9\u0003\u0002\u0002\u0002\u01ca\u01cb\u0003\u0002\u0002\u0002",
    "\u01cb\u01cd\u0003\u0002\u0002\u0002\u01cc\u01ce\u0005\u0006\u0004\u0002",
    "\u01cd\u01cc\u0003\u0002\u0002\u0002\u01cd\u01ce\u0003\u0002\u0002\u0002",
    "\u01ce\u01cf\u0003\u0002\u0002\u0002\u01cf\u01d0\u0007=\u0002\u0002",
    "\u01d0\u01d2\u0007\u00da\u0002\u0002\u01d1\u01d3\u0007\u01af\u0002\u0002",
    "\u01d2\u01d1\u0003\u0002\u0002\u0002\u01d2\u01d3\u0003\u0002\u0002\u0002",
    "\u01d3\u01ff\u0003\u0002\u0002\u0002\u01d4\u01d5\u0007\u00bc\u0002\u0002",
    "\u01d5\u01d6\t\u0004\u0002\u0002\u01d6\u01d8\u0005\u00acW\u0002\u01d7",
    "\u01d9\u0007\u01af\u0002\u0002\u01d8\u01d7\u0003\u0002\u0002\u0002\u01d8",
    "\u01d9\u0003\u0002\u0002\u0002\u01d9\u01ff\u0003\u0002\u0002\u0002\u01da",
    "\u01db\u0007\u00bf\u0002\u0002\u01db\u01e5\u0005\u00ba^\u0002\u01dc",
    "\u01e6\u0005\b\u0005\u0002\u01dd\u01df\u0007\u000f\u0002\u0002\u01de",
    "\u01e0\u0007\u01af\u0002\u0002\u01df\u01de\u0003\u0002\u0002\u0002\u01df",
    "\u01e0\u0003\u0002\u0002\u0002\u01e0\u01e6\u0003\u0002\u0002\u0002\u01e1",
    "\u01e3\u0007$\u0002\u0002\u01e2\u01e4\u0007\u01af\u0002\u0002\u01e3",
    "\u01e2\u0003\u0002\u0002\u0002\u01e3\u01e4\u0003\u0002\u0002\u0002\u01e4",
    "\u01e6\u0003\u0002\u0002\u0002\u01e5\u01dc\u0003\u0002\u0002\u0002\u01e5",
    "\u01dd\u0003\u0002\u0002\u0002\u01e5\u01e1\u0003\u0002\u0002\u0002\u01e6",
    "\u01ff\u0003\u0002\u0002\u0002\u01e7\u01e8\u0007\u0084\u0002\u0002\u01e8",
    "\u01ea\u0005\u00acW\u0002\u01e9\u01eb\u0007\u01af\u0002\u0002\u01ea",
    "\u01e9\u0003\u0002\u0002\u0002\u01ea\u01eb\u0003\u0002\u0002\u0002\u01eb",
    "\u01ff\u0003\u0002\u0002\u0002\u01ec\u01ed\u0007\u0088\u0002\u0002\u01ed",
    "\u01ee\u0007\u01ac\u0002\u0002\u01ee\u01ef\t\u0005\u0002\u0002\u01ef",
    "\u01f0\u0007\u01ae\u0002\u0002\u01f0\u01f1\u0005\u00aaV\u0002\u01f1",
    "\u01f2\u0007\u01ae\u0002\u0002\u01f2\u01f7\u0005\u00aaV\u0002\u01f3",
    "\u01f4\u0007\u01ae\u0002\u0002\u01f4\u01f6\u0005\u00aaV\u0002\u01f5",
    "\u01f3\u0003\u0002\u0002\u0002\u01f6\u01f9\u0003\u0002\u0002\u0002\u01f7",
    "\u01f5\u0003\u0002\u0002\u0002\u01f7\u01f8\u0003\u0002\u0002\u0002\u01f8",
    "\u01fa\u0003\u0002\u0002\u0002\u01f9\u01f7\u0003\u0002\u0002\u0002\u01fa",
    "\u01fc\u0007\u01ad\u0002\u0002\u01fb\u01fd\u0007\u01af\u0002\u0002\u01fc",
    "\u01fb\u0003\u0002\u0002\u0002\u01fc\u01fd\u0003\u0002\u0002\u0002\u01fd",
    "\u01ff\u0003\u0002\u0002\u0002\u01fe\u0181\u0003\u0002\u0002\u0002\u01fe",
    "\u018c\u0003\u0002\u0002\u0002\u01fe\u0190\u0003\u0002\u0002\u0002\u01fe",
    "\u0194\u0003\u0002\u0002\u0002\u01fe\u0199\u0003\u0002\u0002\u0002\u01fe",
    "\u019e\u0003\u0002\u0002\u0002\u01fe\u01a8\u0003\u0002\u0002\u0002\u01fe",
    "\u01af\u0003\u0002\u0002\u0002\u01fe\u01ba\u0003\u0002\u0002\u0002\u01fe",
    "\u01d4\u0003\u0002\u0002\u0002\u01fe\u01da\u0003\u0002\u0002\u0002\u01fe",
    "\u01e7\u0003\u0002\u0002\u0002\u01fe\u01ec\u0003\u0002\u0002\u0002\u01ff",
    "\u000f\u0003\u0002\u0002\u0002\u0200\u0208\u0005x=\u0002\u0201\u0208",
    "\u0005z>\u0002\u0202\u0208\u0005|?\u0002\u0203\u0208\u0005\u0082B\u0002",
    "\u0204\u0208\u0005\u0086D\u0002\u0205\u0208\u0005\u0088E\u0002\u0206",
    "\u0208\u0005\u008cG\u0002\u0207\u0200\u0003\u0002\u0002\u0002\u0207",
    "\u0201\u0003\u0002\u0002\u0002\u0207\u0202\u0003\u0002\u0002\u0002\u0207",
    "\u0203\u0003\u0002\u0002\u0002\u0207\u0204\u0003\u0002\u0002\u0002\u0207",
    "\u0205\u0003\u0002\u0002\u0002\u0207\u0206\u0003\u0002\u0002\u0002\u0208",
    "\u0011\u0003\u0002\u0002\u0002\u0209\u020b\u0005\u00b2Z\u0002\u020a",
    "\u0209\u0003\u0002\u0002\u0002\u020a\u020b\u0003\u0002\u0002\u0002\u020b",
    "\u020c\u0003\u0002\u0002\u0002\u020c\u0214\u00073\u0002\u0002\u020d",
    "\u020e\u0007\u00ab\u0002\u0002\u020e\u020f\u0007\u01ac\u0002\u0002\u020f",
    "\u0210\u0005\u00acW\u0002\u0210\u0212\u0007\u01ad\u0002\u0002\u0211",
    "\u0213\u0007\u007f\u0002\u0002\u0212\u0211\u0003\u0002\u0002\u0002\u0212",
    "\u0213\u0003\u0002\u0002\u0002\u0213\u0215\u0003\u0002\u0002\u0002\u0214",
    "\u020d\u0003\u0002\u0002\u0002\u0214\u0215\u0003\u0002\u0002\u0002\u0215",
    "\u0217\u0003\u0002\u0002\u0002\u0216\u0218\u0007N\u0002\u0002\u0217",
    "\u0216\u0003\u0002\u0002\u0002\u0217\u0218\u0003\u0002\u0002\u0002\u0218",
    "\u0219\u0003\u0002\u0002\u0002\u0219\u021b\u0005\u0014\u000b\u0002\u021a",
    "\u021c\u0005\u00fa~\u0002\u021b\u021a\u0003\u0002\u0002\u0002\u021b",
    "\u021c\u0003\u0002\u0002\u0002\u021c\u021e\u0003\u0002\u0002\u0002\u021d",
    "\u021f\u0005\u001e\u0010\u0002\u021e\u021d\u0003\u0002\u0002\u0002\u021e",
    "\u021f\u0003\u0002\u0002\u0002\u021f\u0222\u0003\u0002\u0002\u0002\u0220",
    "\u0221\u0007N\u0002\u0002\u0221\u0223\u0005\u00dan\u0002\u0222\u0220",
    "\u0003\u0002\u0002\u0002\u0222\u0223\u0003\u0002\u0002\u0002\u0223\u0231",
    "\u0003\u0002\u0002\u0002\u0224\u022f\u0007\u00be\u0002\u0002\u0225\u0230",
    "\u0005\u00ba^\u0002\u0226\u0227\u0007(\u0002\u0002\u0227\u022d\u0007",
    "p\u0002\u0002\u0228\u022a\u0007\u010c\u0002\u0002\u0229\u0228\u0003",
    "\u0002\u0002\u0002\u0229\u022a\u0003\u0002\u0002\u0002\u022a\u022b\u0003",
    "\u0002\u0002\u0002\u022b\u022e\u0005\u0134\u009b\u0002\u022c\u022e\u0007",
    "\u0194\u0002\u0002\u022d\u0229\u0003\u0002\u0002\u0002\u022d\u022c\u0003",
    "\u0002\u0002\u0002\u022e\u0230\u0003\u0002\u0002\u0002\u022f\u0225\u0003",
    "\u0002\u0002\u0002\u022f\u0226\u0003\u0002\u0002\u0002\u0230\u0232\u0003",
    "\u0002\u0002\u0002\u0231\u0224\u0003\u0002\u0002\u0002\u0231\u0232\u0003",
    "\u0002\u0002\u0002\u0232\u0234\u0003\u0002\u0002\u0002\u0233\u0235\u0005",
    "\u00c8e\u0002\u0234\u0233\u0003\u0002\u0002\u0002\u0234\u0235\u0003",
    "\u0002\u0002\u0002\u0235\u0237\u0003\u0002\u0002\u0002\u0236\u0238\u0005",
    "\u00d0i\u0002\u0237\u0236\u0003\u0002\u0002\u0002\u0237\u0238\u0003",
    "\u0002\u0002\u0002\u0238\u023a\u0003\u0002\u0002\u0002\u0239\u023b\u0007",
    "\u01af\u0002\u0002\u023a\u0239\u0003\u0002\u0002\u0002\u023a\u023b\u0003",
    "\u0002\u0002\u0002\u023b\u0013\u0003\u0002\u0002\u0002\u023c\u0241\u0005",
    "\u00f6|\u0002\u023d\u0241\u0005\u012e\u0098\u0002\u023e\u0241\u0005",
    "r:\u0002\u023f\u0241\u0007\u0194\u0002\u0002\u0240\u023c\u0003\u0002",
    "\u0002\u0002\u0240\u023d\u0003\u0002\u0002\u0002\u0240\u023e\u0003\u0002",
    "\u0002\u0002\u0240\u023f\u0003\u0002\u0002\u0002\u0241\u0015\u0003\u0002",
    "\u0002\u0002\u0242\u0244\u0005\u00b2Z\u0002\u0243\u0242\u0003\u0002",
    "\u0002\u0002\u0243\u0244\u0003\u0002\u0002\u0002\u0244\u0245\u0003\u0002",
    "\u0002\u0002\u0245\u024d\u0007\\\u0002\u0002\u0246\u0247\u0007\u00ab",
    "\u0002\u0002\u0247\u0248\u0007\u01ac\u0002\u0002\u0248\u0249\u0005\u00ac",
    "W\u0002\u0249\u024b\u0007\u01ad\u0002\u0002\u024a\u024c\u0007\u007f",
    "\u0002\u0002\u024b\u024a\u0003\u0002\u0002\u0002\u024b\u024c\u0003\u0002",
    "\u0002\u0002\u024c\u024e\u0003\u0002\u0002\u0002\u024d\u0246\u0003\u0002",
    "\u0002\u0002\u024d\u024e\u0003\u0002\u0002\u0002\u024e\u0250\u0003\u0002",
    "\u0002\u0002\u024f\u0251\u0007^\u0002\u0002\u0250\u024f\u0003\u0002",
    "\u0002\u0002\u0250\u0251\u0003\u0002\u0002\u0002\u0251\u0254\u0003\u0002",
    "\u0002\u0002\u0252\u0255\u0005\u012e\u0098\u0002\u0253\u0255\u0005r",
    ":\u0002\u0254\u0252\u0003\u0002\u0002\u0002\u0254\u0253\u0003\u0002",
    "\u0002\u0002\u0255\u0257\u0003\u0002\u0002\u0002\u0256\u0258\u0005\u00fa",
    "~\u0002\u0257\u0256\u0003\u0002\u0002\u0002\u0257\u0258\u0003\u0002",
    "\u0002\u0002\u0258\u025d\u0003\u0002\u0002\u0002\u0259\u025a\u0007\u01ac",
    "\u0002\u0002\u025a\u025b\u0005\u0132\u009a\u0002\u025b\u025c\u0007\u01ad",
    "\u0002\u0002\u025c\u025e\u0003\u0002\u0002\u0002\u025d\u0259\u0003\u0002",
    "\u0002\u0002\u025d\u025e\u0003\u0002\u0002\u0002\u025e\u0260\u0003\u0002",
    "\u0002\u0002\u025f\u0261\u0005\u001e\u0010\u0002\u0260\u025f\u0003\u0002",
    "\u0002\u0002\u0260\u0261\u0003\u0002\u0002\u0002\u0261\u0262\u0003\u0002",
    "\u0002\u0002\u0262\u0264\u0005\u0018\r\u0002\u0263\u0265\u0005\u00c8",
    "e\u0002\u0264\u0263\u0003\u0002\u0002\u0002\u0264\u0265\u0003\u0002",
    "\u0002\u0002\u0265\u0267\u0003\u0002\u0002\u0002\u0266\u0268\u0005\u00d0",
    "i\u0002\u0267\u0266\u0003\u0002\u0002\u0002\u0267\u0268\u0003\u0002",
    "\u0002\u0002\u0268\u026a\u0003\u0002\u0002\u0002\u0269\u026b\u0007\u01af",
    "\u0002\u0002\u026a\u0269\u0003\u0002\u0002\u0002\u026a\u026b\u0003\u0002",
    "\u0002\u0002\u026b\u0017\u0003\u0002\u0002\u0002\u026c\u0272\u0005\u0106",
    "\u0084\u0002\u026d\u0272\u0005\u00ecw\u0002\u026e\u0272\u0005|?\u0002",
    "\u026f\u0270\u00072\u0002\u0002\u0270\u0272\u0007\u00b9\u0002\u0002",
    "\u0271\u026c\u0003\u0002\u0002\u0002\u0271\u026d\u0003\u0002\u0002\u0002",
    "\u0271\u026e\u0003\u0002\u0002\u0002\u0271\u026f\u0003\u0002\u0002\u0002",
    "\u0272\u0019\u0003\u0002\u0002\u0002\u0273\u0275\u0005\u00b2Z\u0002",
    "\u0274\u0273\u0003\u0002\u0002\u0002\u0274\u0275\u0003\u0002\u0002\u0002",
    "\u0275\u0276\u0003\u0002\u0002\u0002\u0276\u0278\u0005\u00be`\u0002",
    "\u0277\u0279\u0005\u00c6d\u0002\u0278\u0277\u0003\u0002\u0002\u0002",
    "\u0278\u0279\u0003\u0002\u0002\u0002\u0279\u027b\u0003\u0002\u0002\u0002",
    "\u027a\u027c\u0005\u00c8e\u0002\u027b\u027a\u0003\u0002\u0002\u0002",
    "\u027b\u027c\u0003\u0002\u0002\u0002\u027c\u027e\u0003\u0002\u0002\u0002",
    "\u027d\u027f\u0005\u00d0i\u0002\u027e\u027d\u0003\u0002\u0002\u0002",
    "\u027e\u027f\u0003\u0002\u0002\u0002\u027f\u0281\u0003\u0002\u0002\u0002",
    "\u0280\u0282\u0007\u01af\u0002\u0002\u0281\u0280\u0003\u0002\u0002\u0002",
    "\u0281\u0282\u0003\u0002\u0002\u0002\u0282\u001b\u0003\u0002\u0002\u0002",
    "\u0283\u0285\u0005\u00b2Z\u0002\u0284\u0283\u0003\u0002\u0002\u0002",
    "\u0284\u0285\u0003\u0002\u0002\u0002\u0285\u0286\u0003\u0002\u0002\u0002",
    "\u0286\u028e\u0007\u00b5\u0002\u0002\u0287\u0288\u0007\u00ab\u0002\u0002",
    "\u0288\u0289\u0007\u01ac\u0002\u0002\u0289\u028a\u0005\u00acW\u0002",
    "\u028a\u028c\u0007\u01ad\u0002\u0002\u028b\u028d\u0007\u007f\u0002\u0002",
    "\u028c\u028b\u0003\u0002\u0002\u0002\u028c\u028d\u0003\u0002\u0002\u0002",
    "\u028d\u028f\u0003\u0002\u0002\u0002\u028e\u0287\u0003\u0002\u0002\u0002",
    "\u028e\u028f\u0003\u0002\u0002\u0002\u028f\u0292\u0003\u0002\u0002\u0002",
    "\u0290\u0293\u0005\u012e\u0098\u0002\u0291\u0293\u0005r:\u0002\u0292",
    "\u0290\u0003\u0002\u0002\u0002\u0292\u0291\u0003\u0002\u0002\u0002\u0293",
    "\u0295\u0003\u0002\u0002\u0002\u0294\u0296\u0005\u00f8}\u0002\u0295",
    "\u0294\u0003\u0002\u0002\u0002\u0295\u0296\u0003\u0002\u0002\u0002\u0296",
    "\u0297\u0003\u0002\u0002\u0002\u0297\u0298\u0007\u00a0\u0002\u0002\u0298",
    "\u029d\u0005\u00b6\\\u0002\u0299\u029a\u0007\u01ae\u0002\u0002\u029a",
    "\u029c\u0005\u00b6\\\u0002\u029b\u0299\u0003\u0002\u0002\u0002\u029c",
    "\u029f\u0003\u0002\u0002\u0002\u029d\u029b\u0003\u0002\u0002\u0002\u029d",
    "\u029e\u0003\u0002\u0002\u0002\u029e\u02a1\u0003\u0002\u0002\u0002\u029f",
    "\u029d\u0003\u0002\u0002\u0002\u02a0\u02a2\u0005\u001e\u0010\u0002\u02a1",
    "\u02a0\u0003\u0002\u0002\u0002\u02a1\u02a2\u0003\u0002\u0002\u0002\u02a2",
    "\u02a5\u0003\u0002\u0002\u0002\u02a3\u02a4\u0007N\u0002\u0002\u02a4",
    "\u02a6\u0005\u00dan\u0002\u02a5\u02a3\u0003\u0002\u0002\u0002\u02a5",
    "\u02a6\u0003\u0002\u0002\u0002\u02a6\u02b4\u0003\u0002\u0002\u0002\u02a7",
    "\u02b2\u0007\u00be\u0002\u0002\u02a8\u02b3\u0005\u00b8]\u0002\u02a9",
    "\u02aa\u0007(\u0002\u0002\u02aa\u02b0\u0007p\u0002\u0002\u02ab\u02ad",
    "\u0007\u010c\u0002\u0002\u02ac\u02ab\u0003\u0002\u0002\u0002\u02ac\u02ad",
    "\u0003\u0002\u0002\u0002\u02ad\u02ae\u0003\u0002\u0002\u0002\u02ae\u02b1",
    "\u0005\u0134\u009b\u0002\u02af\u02b1\u0007\u0194\u0002\u0002\u02b0\u02ac",
    "\u0003\u0002\u0002\u0002\u02b0\u02af\u0003\u0002\u0002\u0002\u02b1\u02b3",
    "\u0003\u0002\u0002\u0002\u02b2\u02a8\u0003\u0002\u0002\u0002\u02b2\u02a9",
    "\u0003\u0002\u0002\u0002\u02b3\u02b5\u0003\u0002\u0002\u0002\u02b4\u02a7",
    "\u0003\u0002\u0002\u0002\u02b4\u02b5\u0003\u0002\u0002\u0002\u02b5\u02b7",
    "\u0003\u0002\u0002\u0002\u02b6\u02b8\u0005\u00c8e\u0002\u02b7\u02b6",
    "\u0003\u0002\u0002\u0002\u02b7\u02b8\u0003\u0002\u0002\u0002\u02b8\u02ba",
    "\u0003\u0002\u0002\u0002\u02b9\u02bb\u0005\u00d0i\u0002\u02ba\u02b9",
    "\u0003\u0002\u0002\u0002\u02ba\u02bb\u0003\u0002\u0002\u0002\u02bb\u02bd",
    "\u0003\u0002\u0002\u0002\u02bc\u02be\u0007\u01af\u0002\u0002\u02bd\u02bc",
    "\u0003\u0002\u0002\u0002\u02bd\u02be\u0003\u0002\u0002\u0002\u02be\u001d",
    "\u0003\u0002\u0002\u0002\u02bf\u02c0\u0007\u0145\u0002\u0002\u02c0\u02c5",
    "\u0005 \u0011\u0002\u02c1\u02c2\u0007\u01ae\u0002\u0002\u02c2\u02c4",
    "\u0005 \u0011\u0002\u02c3\u02c1\u0003\u0002\u0002\u0002\u02c4\u02c7",
    "\u0003\u0002\u0002\u0002\u02c5\u02c3\u0003\u0002\u0002\u0002\u02c5\u02c6",
    "\u0003\u0002\u0002\u0002\u02c6\u02d3\u0003\u0002\u0002\u0002\u02c7\u02c5",
    "\u0003\u0002\u0002\u0002\u02c8\u02cb\u0007^\u0002\u0002\u02c9\u02cc",
    "\u0007\u0194\u0002\u0002\u02ca\u02cc\u0005\u0128\u0095\u0002\u02cb\u02c9",
    "\u0003\u0002\u0002\u0002\u02cb\u02ca\u0003\u0002\u0002\u0002\u02cc\u02d1",
    "\u0003\u0002\u0002\u0002\u02cd\u02ce\u0007\u01ac\u0002\u0002\u02ce\u02cf",
    "\u0005\u0132\u009a\u0002\u02cf\u02d0\u0007\u01ad\u0002\u0002\u02d0\u02d2",
    "\u0003\u0002\u0002\u0002\u02d1\u02cd\u0003\u0002\u0002\u0002\u02d1\u02d2",
    "\u0003\u0002\u0002\u0002\u02d2\u02d4\u0003\u0002\u0002\u0002\u02d3\u02c8",
    "\u0003\u0002\u0002\u0002\u02d3\u02d4\u0003\u0002\u0002\u0002\u02d4\u001f",
    "\u0003\u0002\u0002\u0002\u02d5\u02d8\u0005\"\u0012\u0002\u02d6\u02d8",
    "\u0005\u00acW\u0002\u02d7\u02d5\u0003\u0002\u0002\u0002\u02d7\u02d6",
    "\u0003\u0002\u0002\u0002\u02d8\u02dd\u0003\u0002\u0002\u0002\u02d9\u02db",
    "\u0007\t\u0002\u0002\u02da\u02d9\u0003\u0002\u0002\u0002\u02da\u02db",
    "\u0003\u0002\u0002\u0002\u02db\u02dc\u0003\u0002\u0002\u0002\u02dc\u02de",
    "\u0005\u0102\u0082\u0002\u02dd\u02da\u0003\u0002\u0002\u0002\u02dd\u02de",
    "\u0003\u0002\u0002\u0002\u02de!\u0003\u0002\u0002\u0002\u02df\u02e3",
    "\u0007\u00f4\u0002\u0002\u02e0\u02e3\u0007\u0119\u0002\u0002\u02e1\u02e3",
    "\u0005\u0128\u0095\u0002\u02e2\u02df\u0003\u0002\u0002\u0002\u02e2\u02e0",
    "\u0003\u0002\u0002\u0002\u02e2\u02e1\u0003\u0002\u0002\u0002\u02e3\u02e4",
    "\u0003\u0002\u0002\u0002\u02e4\u02e7\u0007\u01a7\u0002\u0002\u02e5\u02e8",
    "\u0007\u01b1\u0002\u0002\u02e6\u02e8\u0005\u0146\u00a4\u0002\u02e7\u02e5",
    "\u0003\u0002\u0002\u0002\u02e7\u02e6\u0003\u0002\u0002\u0002\u02e8\u02eb",
    "\u0003\u0002\u0002\u0002\u02e9\u02eb\u0007\u018e\u0002\u0002\u02ea\u02e2",
    "\u0003\u0002\u0002\u0002\u02ea\u02e9\u0003\u0002\u0002\u0002\u02eb#",
    "\u0003\u0002\u0002\u0002\u02ec\u02ed\u0007&\u0002\u0002\u02ed\u02ee",
    "\u0007.\u0002\u0002\u02ee\u02f2\u0005\u0146\u00a4\u0002\u02ef\u02f0",
    "\u0007!\u0002\u0002\u02f0\u02f1\u0007\u019b\u0002\u0002\u02f1\u02f3",
    "\t\u0006\u0002\u0002\u02f2\u02ef\u0003\u0002\u0002\u0002\u02f2\u02f3",
    "\u0003\u0002\u0002\u0002\u02f3\u0300\u0003\u0002\u0002\u0002\u02f4\u02f6",
    "\u0007s\u0002\u0002\u02f5\u02f7\u0007\u0083\u0002\u0002\u02f6\u02f5",
    "\u0003\u0002\u0002\u0002\u02f6\u02f7\u0003\u0002\u0002\u0002\u02f7\u02f8",
    "\u0003\u0002\u0002\u0002\u02f8\u02fd\u0005\u0120\u0091\u0002\u02f9\u02fa",
    "\u0007\u01ae\u0002\u0002\u02fa\u02fc\u0005\u0120\u0091\u0002\u02fb\u02f9",
    "\u0003\u0002\u0002\u0002\u02fc\u02ff\u0003\u0002\u0002\u0002\u02fd\u02fb",
    "\u0003\u0002\u0002\u0002\u02fd\u02fe\u0003\u0002\u0002\u0002\u02fe\u0301",
    "\u0003\u0002\u0002\u0002\u02ff\u02fd\u0003\u0002\u0002\u0002\u0300\u02f4",
    "\u0003\u0002\u0002\u0002\u0300\u0301\u0003\u0002\u0002\u0002\u0301\u030c",
    "\u0003\u0002\u0002\u0002\u0302\u0303\u0007g\u0002\u0002\u0303\u0304",
    "\u0007s\u0002\u0002\u0304\u0309\u0005\u0120\u0091\u0002\u0305\u0306",
    "\u0007\u01ae\u0002\u0002\u0306\u0308\u0005\u0120\u0091\u0002\u0307\u0305",
    "\u0003\u0002\u0002\u0002\u0308\u030b\u0003\u0002\u0002\u0002\u0309\u0307",
    "\u0003\u0002\u0002\u0002\u0309\u030a\u0003\u0002\u0002\u0002\u030a\u030d",
    "\u0003\u0002\u0002\u0002\u030b\u0309\u0003\u0002\u0002\u0002\u030c\u0302",
    "\u0003\u0002\u0002\u0002\u030c\u030d\u0003\u0002\u0002\u0002\u030d\u0310",
    "\u0003\u0002\u0002\u0002\u030e\u030f\u0007\u001c\u0002\u0002\u030f\u0311",
    "\u0005\u0146\u00a4\u0002\u0310\u030e\u0003\u0002\u0002\u0002\u0310\u0311",
    "\u0003\u0002\u0002\u0002\u0311\u031b\u0003\u0002\u0002\u0002\u0312\u0313",
    "\u0007\u00c0\u0002\u0002\u0313\u0318\u0005\u011c\u008f\u0002\u0314\u0315",
    "\u0007\u01ae\u0002\u0002\u0315\u0317\u0005\u011c\u008f\u0002\u0316\u0314",
    "\u0003\u0002\u0002\u0002\u0317\u031a\u0003\u0002\u0002\u0002\u0318\u0316",
    "\u0003\u0002\u0002\u0002\u0318\u0319\u0003\u0002\u0002\u0002\u0319\u031c",
    "\u0003\u0002\u0002\u0002\u031a\u0318\u0003\u0002\u0002\u0002\u031b\u0312",
    "\u0003\u0002\u0002\u0002\u031b\u031c\u0003\u0002\u0002\u0002\u031c%",
    "\u0003\u0002\u0002\u0002\u031d\u031f\u0007&\u0002\u0002\u031e\u0320",
    "\u0007\u00b3\u0002\u0002\u031f\u031e\u0003\u0002\u0002\u0002\u031f\u0320",
    "\u0003\u0002\u0002\u0002\u0320\u0322\u0003\u0002\u0002\u0002\u0321\u0323",
    "\u0005\u0138\u009d\u0002\u0322\u0321\u0003\u0002\u0002\u0002\u0322\u0323",
    "\u0003\u0002\u0002\u0002\u0323\u0324\u0003\u0002\u0002\u0002\u0324\u0325",
    "\u0007Z\u0002\u0002\u0325\u0326\u0005\u0146\u00a4\u0002\u0326\u0327",
    "\u0007s\u0002\u0002\u0327\u0328\u0005\u00e6t\u0002\u0328\u0329\u0007",
    "\u01ac\u0002\u0002\u0329\u032b\u0005\u0132\u009a\u0002\u032a\u032c\t",
    "\u0007\u0002\u0002\u032b\u032a\u0003\u0002\u0002\u0002\u032b\u032c\u0003",
    "\u0002\u0002\u0002\u032c\u032d\u0003\u0002\u0002\u0002\u032d\u032f\u0007",
    "\u01ad\u0002\u0002\u032e\u0330\u0005\u009eP\u0002\u032f\u032e\u0003",
    "\u0002\u0002\u0002\u032f\u0330\u0003\u0002\u0002\u0002\u0330\u0333\u0003",
    "\u0002\u0002\u0002\u0331\u0332\u0007s\u0002\u0002\u0332\u0334\u0005",
    "\u0146\u00a4\u0002\u0333\u0331\u0003\u0002\u0002\u0002\u0333\u0334\u0003",
    "\u0002\u0002\u0002\u0334\u0336\u0003\u0002\u0002\u0002\u0335\u0337\u0007",
    "\u01af\u0002\u0002\u0336\u0335\u0003\u0002\u0002\u0002\u0336\u0337\u0003",
    "\u0002\u0002\u0002\u0337\'\u0003\u0002\u0002\u0002\u0338\u0339\u0007",
    "&\u0002\u0002\u0339\u033a\t\b\u0002\u0002\u033a\u033d\u0005\u012c\u0097",
    "\u0002\u033b\u033c\u0007\u01af\u0002\u0002\u033c\u033e\u0007\u0195\u0002",
    "\u0002\u033d\u033b\u0003\u0002\u0002\u0002\u033d\u033e\u0003\u0002\u0002",
    "\u0002\u033e\u034d\u0003\u0002\u0002\u0002\u033f\u0341\u0007\u01ac\u0002",
    "\u0002\u0340\u033f\u0003\u0002\u0002\u0002\u0340\u0341\u0003\u0002\u0002",
    "\u0002\u0341\u0342\u0003\u0002\u0002\u0002\u0342\u0347\u0005*\u0016",
    "\u0002\u0343\u0344\u0007\u01ae\u0002\u0002\u0344\u0346\u0005*\u0016",
    "\u0002\u0345\u0343\u0003\u0002\u0002\u0002\u0346\u0349\u0003\u0002\u0002",
    "\u0002\u0347\u0345\u0003\u0002\u0002\u0002\u0347\u0348\u0003\u0002\u0002",
    "\u0002\u0348\u034b\u0003\u0002\u0002\u0002\u0349\u0347\u0003\u0002\u0002",
    "\u0002\u034a\u034c\u0007\u01ad\u0002\u0002\u034b\u034a\u0003\u0002\u0002",
    "\u0002\u034b\u034c\u0003\u0002\u0002\u0002\u034c\u034e\u0003\u0002\u0002",
    "\u0002\u034d\u0340\u0003\u0002\u0002\u0002\u034d\u034e\u0003\u0002\u0002",
    "\u0002\u034e\u0358\u0003\u0002\u0002\u0002\u034f\u0350\u0007\u00c0\u0002",
    "\u0002\u0350\u0355\u0005,\u0017\u0002\u0351\u0352\u0007\u01ae\u0002",
    "\u0002\u0352\u0354\u0005,\u0017\u0002\u0353\u0351\u0003\u0002\u0002",
    "\u0002\u0354\u0357\u0003\u0002\u0002\u0002\u0355\u0353\u0003\u0002\u0002",
    "\u0002\u0355\u0356\u0003\u0002\u0002\u0002\u0356\u0359\u0003\u0002\u0002",
    "\u0002\u0357\u0355\u0003\u0002\u0002\u0002\u0358\u034f\u0003\u0002\u0002",
    "\u0002\u0358\u0359\u0003\u0002\u0002\u0002\u0359\u035c\u0003\u0002\u0002",
    "\u0002\u035a\u035b\u0007I\u0002\u0002\u035b\u035d\u0007\u008d\u0002",
    "\u0002\u035c\u035a\u0003\u0002\u0002\u0002\u035c\u035d\u0003\u0002\u0002",
    "\u0002\u035d\u035e\u0003\u0002\u0002\u0002\u035e\u035f\u0007\t\u0002",
    "\u0002\u035f\u0360\u0005\u0006\u0004\u0002\u0360)\u0003\u0002\u0002",
    "\u0002\u0361\u0365\u0007\u0194\u0002\u0002\u0362\u0363\u0005\u0146\u00a4",
    "\u0002\u0363\u0364\u0007\u01a7\u0002\u0002\u0364\u0366\u0003\u0002\u0002",
    "\u0002\u0365\u0362\u0003\u0002\u0002\u0002\u0365\u0366\u0003\u0002\u0002",
    "\u0002\u0366\u0368\u0003\u0002\u0002\u0002\u0367\u0369\u0007\t\u0002",
    "\u0002\u0368\u0367\u0003\u0002\u0002\u0002\u0368\u0369\u0003\u0002\u0002",
    "\u0002\u0369\u036a\u0003\u0002\u0002\u0002\u036a\u036c\u0005\u013e\u00a0",
    "\u0002\u036b\u036d\u0007\u00ba\u0002\u0002\u036c\u036b\u0003\u0002\u0002",
    "\u0002\u036c\u036d\u0003\u0002\u0002\u0002\u036d\u0370\u0003\u0002\u0002",
    "\u0002\u036e\u036f\u0007\u019b\u0002\u0002\u036f\u0371\u0005\u0140\u00a1",
    "\u0002\u0370\u036e\u0003\u0002\u0002\u0002\u0370\u0371\u0003\u0002\u0002",
    "\u0002\u0371\u0373\u0003\u0002\u0002\u0002\u0372\u0374\t\t\u0002\u0002",
    "\u0373\u0372\u0003\u0002\u0002\u0002\u0373\u0374\u0003\u0002\u0002\u0002",
    "\u0374+\u0003\u0002\u0002\u0002\u0375\u0379\u0007\u00fd\u0002\u0002",
    "\u0376\u0379\u0007\u0155\u0002\u0002\u0377\u0379\u0005\u008eH\u0002",
    "\u0378\u0375\u0003\u0002\u0002\u0002\u0378\u0376\u0003\u0002\u0002\u0002",
    "\u0378\u0377\u0003\u0002\u0002\u0002\u0379-\u0003\u0002\u0002\u0002",
    "\u037a\u037b\u0007&\u0002\u0002\u037b\u037c\u0007\u00a4\u0002\u0002",
    "\u037c\u037d\u0005\u0146\u00a4\u0002\u037d\u037e\u0007s\u0002\u0002",
    "\u037e\u037f\u0005\u00e6t\u0002\u037f\u0380\u0007\u01ac\u0002\u0002",
    "\u0380\u0381\u0005\u0132\u009a\u0002\u0381\u0394\u0007\u01ad\u0002\u0002",
    "\u0382\u0388\u0007\u00c0\u0002\u0002\u0383\u0389\u0007\u010a\u0002\u0002",
    "\u0384\u0385\u0007\u0162\u0002\u0002\u0385\u0386\u0007\u0195\u0002\u0002",
    "\u0386\u0389\t\n\u0002\u0002\u0387\u0389\u0007\u0170\u0002\u0002\u0388",
    "\u0383\u0003\u0002\u0002\u0002\u0388\u0384\u0003\u0002\u0002\u0002\u0388",
    "\u0387\u0003\u0002\u0002\u0002\u0389\u038c\u0003\u0002\u0002\u0002\u038a",
    "\u038b\u0007\u01ae\u0002\u0002\u038b\u038d\u0007\u0139\u0002\u0002\u038c",
    "\u038a\u0003\u0002\u0002\u0002\u038c\u038d\u0003\u0002\u0002\u0002\u038d",
    "\u0392\u0003\u0002\u0002\u0002\u038e\u038f\u0007\u01ae\u0002\u0002\u038f",
    "\u0390\u0007\u0117\u0002\u0002\u0390\u0391\u0007\u019b\u0002\u0002\u0391",
    "\u0393\u0005\u0136\u009c\u0002\u0392\u038e\u0003\u0002\u0002\u0002\u0392",
    "\u0393\u0003\u0002\u0002\u0002\u0393\u0395\u0003\u0002\u0002\u0002\u0394",
    "\u0382\u0003\u0002\u0002\u0002\u0394\u0395\u0003\u0002\u0002\u0002\u0395",
    "\u0397\u0003\u0002\u0002\u0002\u0396\u0398\u0007\u01af\u0002\u0002\u0397",
    "\u0396\u0003\u0002\u0002\u0002\u0397\u0398\u0003\u0002\u0002\u0002\u0398",
    "/\u0003\u0002\u0002\u0002\u0399\u039a\u0007&\u0002\u0002\u039a\u039b",
    "\u0007\u00a6\u0002\u0002\u039b\u039c\u0005\u0128\u0095\u0002\u039c\u039d",
    "\u0007\u01ac\u0002\u0002\u039d\u039f\u0005\u0094K\u0002\u039e\u03a0",
    "\u0007\u01ae\u0002\u0002\u039f\u039e\u0003\u0002\u0002\u0002\u039f\u03a0",
    "\u0003\u0002\u0002\u0002\u03a0\u03a1\u0003\u0002\u0002\u0002\u03a1\u03a5",
    "\u0007\u01ad\u0002\u0002\u03a2\u03a3\u0007s\u0002\u0002\u03a3\u03a6",
    "\u0005\u0146\u00a4\u0002\u03a4\u03a6\u00072\u0002\u0002\u03a5\u03a2",
    "\u0003\u0002\u0002\u0002\u03a5\u03a4\u0003\u0002\u0002\u0002\u03a5\u03a6",
    "\u0003\u0002\u0002\u0002\u03a6\u03aa\u0003\u0002\u0002\u0002\u03a7\u03a8",
    "\u0007\u0177\u0002\u0002\u03a8\u03ab\u0005\u0146\u00a4\u0002\u03a9\u03ab",
    "\u00072\u0002\u0002\u03aa\u03a7\u0003\u0002\u0002\u0002\u03aa\u03a9",
    "\u0003\u0002\u0002\u0002\u03aa\u03ab\u0003\u0002\u0002\u0002\u03ab\u03ad",
    "\u0003\u0002\u0002\u0002\u03ac\u03ae\u0007\u01af\u0002\u0002\u03ad\u03ac",
    "\u0003\u0002\u0002\u0002\u03ad\u03ae\u0003\u0002\u0002\u0002\u03ae1",
    "\u0003\u0002\u0002\u0002\u03af\u03b0\u0007&\u0002\u0002\u03b0\u03b1",
    "\u0007\u00bb\u0002\u0002\u03b1\u03b6\u0005\u012a\u0096\u0002\u03b2\u03b3",
    "\u0007\u01ac\u0002\u0002\u03b3\u03b4\u0005\u0132\u009a\u0002\u03b4\u03b5",
    "\u0007\u01ad\u0002\u0002\u03b5\u03b7\u0003\u0002\u0002\u0002\u03b6\u03b2",
    "\u0003\u0002\u0002\u0002\u03b6\u03b7\u0003\u0002\u0002\u0002\u03b7\u03c1",
    "\u0003\u0002\u0002\u0002\u03b8\u03b9\u0007\u00c0\u0002\u0002\u03b9\u03be",
    "\u00054\u001b\u0002\u03ba\u03bb\u0007\u01ae\u0002\u0002\u03bb\u03bd",
    "\u00054\u001b\u0002\u03bc\u03ba\u0003\u0002\u0002\u0002\u03bd\u03c0",
    "\u0003\u0002\u0002\u0002\u03be\u03bc\u0003\u0002\u0002\u0002\u03be\u03bf",
    "\u0003\u0002\u0002\u0002\u03bf\u03c2\u0003\u0002\u0002\u0002\u03c0\u03be",
    "\u0003\u0002\u0002\u0002\u03c1\u03b8\u0003\u0002\u0002\u0002\u03c1\u03c2",
    "\u0003\u0002\u0002\u0002\u03c2\u03c3\u0003\u0002\u0002\u0002\u03c3\u03c4",
    "\u0007\t\u0002\u0002\u03c4\u03c8\u0005\u001a\u000e\u0002\u03c5\u03c6",
    "\u0007\u00c0\u0002\u0002\u03c6\u03c7\u0007\u0017\u0002\u0002\u03c7\u03c9",
    "\u0007y\u0002\u0002\u03c8\u03c5\u0003\u0002\u0002\u0002\u03c8\u03c9",
    "\u0003\u0002\u0002\u0002\u03c9\u03cb\u0003\u0002\u0002\u0002\u03ca\u03cc",
    "\u0007\u01af\u0002\u0002\u03cb\u03ca\u0003\u0002\u0002\u0002\u03cb\u03cc",
    "\u0003\u0002\u0002\u0002\u03cc3\u0003\u0002\u0002\u0002\u03cd\u03ce",
    "\t\u000b\u0002\u0002\u03ce5\u0003\u0002\u0002\u0002\u03cf\u03d0\u0007",
    "\u0006\u0002\u0002\u03d0\u03d1\u0007\u00a6\u0002\u0002\u03d1\u03f0\u0005",
    "\u0128\u0095\u0002\u03d2\u03d3\u0007\u00a0\u0002\u0002\u03d3\u03d4\u0007",
    "\u01ac\u0002\u0002\u03d4\u03d5\u0007\u0122\u0002\u0002\u03d5\u03d6\u0007",
    "\u019b\u0002\u0002\u03d6\u03d7\t\f\u0002\u0002\u03d7\u03f1\u0007\u01ad",
    "\u0002\u0002\u03d8\u03d9\u0007\u0004\u0002\u0002\u03d9\u03f1\u0005\u0096",
    "L\u0002\u03da\u03db\u0007:\u0002\u0002\u03db\u03dc\u0007 \u0002\u0002",
    "\u03dc\u03f1\u0005\u0146\u00a4\u0002\u03dd\u03de\u0007\u00c0\u0002\u0002",
    "\u03de\u03df\u0007\u0017\u0002\u0002\u03df\u03e0\u0007\u0004\u0002\u0002",
    "\u03e0\u03e1\u0007 \u0002\u0002\u03e1\u03e2\u0005\u0146\u00a4\u0002",
    "\u03e2\u03e3\u0007K\u0002\u0002\u03e3\u03e4\u0007a\u0002\u0002\u03e4",
    "\u03e5\u0007\u01ac\u0002\u0002\u03e5\u03e6\u0005\u0132\u009a\u0002\u03e6",
    "\u03e7\u0007\u01ad\u0002\u0002\u03e7\u03e8\u0007\u008c\u0002\u0002\u03e8",
    "\u03e9\u0005\u0128\u0095\u0002\u03e9\u03ea\u0007\u01ac\u0002\u0002\u03ea",
    "\u03eb\u0005\u0132\u009a\u0002\u03eb\u03ec\u0007\u01ad\u0002\u0002\u03ec",
    "\u03f1\u0003\u0002\u0002\u0002\u03ed\u03ee\u0007\u0017\u0002\u0002\u03ee",
    "\u03ef\u0007 \u0002\u0002\u03ef\u03f1\u0005\u0146\u00a4\u0002\u03f0",
    "\u03d2\u0003\u0002\u0002\u0002\u03f0\u03d8\u0003\u0002\u0002\u0002\u03f0",
    "\u03da\u0003\u0002\u0002\u0002\u03f0\u03dd\u0003\u0002\u0002\u0002\u03f0",
    "\u03ed\u0003\u0002\u0002\u0002\u03f1\u03f3\u0003\u0002\u0002\u0002\u03f2",
    "\u03f4\u0007\u01af\u0002\u0002\u03f3\u03f2\u0003\u0002\u0002\u0002\u03f3",
    "\u03f4\u0003\u0002\u0002\u0002\u03f47\u0003\u0002\u0002\u0002\u03f5",
    "\u03f6\u0007\u0006\u0002\u0002\u03f6\u03f9\u0007.\u0002\u0002\u03f7",
    "\u03fa\u0005\u0146\u00a4\u0002\u03f8\u03fa\u0007(\u0002\u0002\u03f9",
    "\u03f7\u0003\u0002\u0002\u0002\u03f9\u03f8\u0003\u0002\u0002\u0002\u03fa",
    "\u0407\u0003\u0002\u0002\u0002\u03fb\u03fc\u0007\u0130\u0002\u0002\u03fc",
    "\u03fd\u0007\u0132\u0002\u0002\u03fd\u03fe\u0007\u019b\u0002\u0002\u03fe",
    "\u0408\u0005\u0146\u00a4\u0002\u03ff\u0400\u0007\u001c\u0002\u0002\u0400",
    "\u0408\u0005\u0146\u00a4\u0002\u0401\u0402\u0007\u00a0\u0002\u0002\u0402",
    "\u0405\u0005:\u001e\u0002\u0403\u0404\u0007\u00c0\u0002\u0002\u0404",
    "\u0406\u0005b2\u0002\u0405\u0403\u0003\u0002\u0002\u0002\u0405\u0406",
    "\u0003\u0002\u0002\u0002\u0406\u0408\u0003\u0002\u0002\u0002\u0407\u03fb",
    "\u0003\u0002\u0002\u0002\u0407\u03ff\u0003\u0002\u0002\u0002\u0407\u0401",
    "\u0003\u0002\u0002\u0002\u0408\u040a\u0003\u0002\u0002\u0002\u0409\u040b",
    "\u0007\u01af\u0002\u0002\u040a\u0409\u0003\u0002\u0002\u0002\u040a\u040b",
    "\u0003\u0002\u0002\u0002\u040b9\u0003\u0002\u0002\u0002\u040c\u0423",
    "\u0005<\u001f\u0002\u040d\u0423\u0005> \u0002\u040e\u0423\u0005B\"\u0002",
    "\u040f\u0423\u0005D#\u0002\u0410\u0423\u0005F$\u0002\u0411\u0423\u0005",
    "H%\u0002\u0412\u0423\u0005J&\u0002\u0413\u0423\u0005L\'\u0002\u0414",
    "\u0423\u0005N(\u0002\u0415\u0423\u0005P)\u0002\u0416\u0423\u0005R*\u0002",
    "\u0417\u0418\u0007\u0104\u0002\u0002\u0418\u0423\u0005\u011e\u0090\u0002",
    "\u0419\u0423\u0007\u0003\u0002\u0002\u041a\u0423\u0005T+\u0002\u041b",
    "\u0423\u0005V,\u0002\u041c\u0423\u0005X-\u0002\u041d\u0423\u0005Z.\u0002",
    "\u041e\u0423\u0005\\/\u0002\u041f\u0423\u0005^0\u0002\u0420\u0423\u0005",
    "`1\u0002\u0421\u0423\u0005b2\u0002\u0422\u040c\u0003\u0002\u0002\u0002",
    "\u0422\u040d\u0003\u0002\u0002\u0002\u0422\u040e\u0003\u0002\u0002\u0002",
    "\u0422\u040f\u0003\u0002\u0002\u0002\u0422\u0410\u0003\u0002\u0002\u0002",
    "\u0422\u0411\u0003\u0002\u0002\u0002\u0422\u0412\u0003\u0002\u0002\u0002",
    "\u0422\u0413\u0003\u0002\u0002\u0002\u0422\u0414\u0003\u0002\u0002\u0002",
    "\u0422\u0415\u0003\u0002\u0002\u0002\u0422\u0416\u0003\u0002\u0002\u0002",
    "\u0422\u0417\u0003\u0002\u0002\u0002\u0422\u0419\u0003\u0002\u0002\u0002",
    "\u0422\u041a\u0003\u0002\u0002\u0002\u0422\u041b\u0003\u0002\u0002\u0002",
    "\u0422\u041c\u0003\u0002\u0002\u0002\u0422\u041d\u0003\u0002\u0002\u0002",
    "\u0422\u041e\u0003\u0002\u0002\u0002\u0422\u041f\u0003\u0002\u0002\u0002",
    "\u0422\u0420\u0003\u0002\u0002\u0002\u0422\u0421\u0003\u0002\u0002\u0002",
    "\u0423;\u0003\u0002\u0002\u0002\u0424\u0425\u0007\u00cf\u0002\u0002",
    "\u0425\u0436\u0005\u0136\u009c\u0002\u0426\u0427\u0007\u00d0\u0002\u0002",
    "\u0427\u0436\u0007q\u0002\u0002\u0428\u042d\u0007s\u0002\u0002\u0429",
    "\u042a\u0007\u0117\u0002\u0002\u042a\u042b\u0007\u019b\u0002\u0002\u042b",
    "\u042e\u0007s\u0002\u0002\u042c\u042e\u0007q\u0002\u0002\u042d\u0429",
    "\u0003\u0002\u0002\u0002\u042d\u042c\u0003\u0002\u0002\u0002\u042e\u0436",
    "\u0003\u0002\u0002\u0002\u042f\u0430\u0007\u00d1\u0002\u0002\u0430\u0436",
    "\u0005\u0136\u009c\u0002\u0431\u0432\u0007\u00d2\u0002\u0002\u0432\u0436",
    "\u0005\u0136\u009c\u0002\u0433\u0434\u0007\u00d3\u0002\u0002\u0434\u0436",
    "\t\r\u0002\u0002\u0435\u0424\u0003\u0002\u0002\u0002\u0435\u0426\u0003",
    "\u0002\u0002\u0002\u0435\u0428\u0003\u0002\u0002\u0002\u0435\u042f\u0003",
    "\u0002\u0002\u0002\u0435\u0431\u0003\u0002\u0002\u0002\u0435\u0433\u0003",
    "\u0002\u0002\u0002\u0436=\u0003\u0002\u0002\u0002\u0437\u0438\u0007",
    "\u00dc\u0002\u0002\u0438\u0448\u0007\u019b\u0002\u0002\u0439\u0449\u0007",
    "q\u0002\u0002\u043a\u0445\u0007s\u0002\u0002\u043b\u0440\u0005@!\u0002",
    "\u043c\u043d\u0007\u01ae\u0002\u0002\u043d\u043f\u0005@!\u0002\u043e",
    "\u043c\u0003\u0002\u0002\u0002\u043f\u0442\u0003\u0002\u0002\u0002\u0440",
    "\u043e\u0003\u0002\u0002\u0002\u0440\u0441\u0003\u0002\u0002\u0002\u0441",
    "\u0444\u0003\u0002\u0002\u0002\u0442\u0440\u0003\u0002\u0002\u0002\u0443",
    "\u043b\u0003\u0002\u0002\u0002\u0444\u0447\u0003\u0002\u0002\u0002\u0445",
    "\u0443\u0003\u0002\u0002\u0002\u0445\u0446\u0003\u0002\u0002\u0002\u0446",
    "\u0449\u0003\u0002\u0002\u0002\u0447\u0445\u0003\u0002\u0002\u0002\u0448",
    "\u0439\u0003\u0002\u0002\u0002\u0448\u043a\u0003\u0002\u0002\u0002\u0449",
    "?\u0003\u0002\u0002\u0002\u044a\u044b\u0007\u00ce\u0002\u0002\u044b",
    "\u044c\u0007\u019b\u0002\u0002\u044c\u0451\u0005\u0136\u009c\u0002\u044d",
    "\u044e\u0007\u00db\u0002\u0002\u044e\u044f\u0007\u019b\u0002\u0002\u044f",
    "\u0451\t\u000e\u0002\u0002\u0450\u044a\u0003\u0002\u0002\u0002\u0450",
    "\u044d\u0003\u0002\u0002\u0002\u0451A\u0003\u0002\u0002\u0002\u0452",
    "\u0453\u0007!\u0002\u0002\u0453\u0454\u0007\u019b\u0002\u0002\u0454",
    "\u0455\t\u0006\u0002\u0002\u0455C\u0003\u0002\u0002\u0002\u0456\u0457",
    "\u0007\u00e7\u0002\u0002\u0457\u045b\u0005\u0136\u009c\u0002\u0458\u0459",
    "\u0007\u00e8\u0002\u0002\u0459\u045b\t\u000f\u0002\u0002\u045a\u0456",
    "\u0003\u0002\u0002\u0002\u045a\u0458\u0003\u0002\u0002\u0002\u045bE",
    "\u0003\u0002\u0002\u0002\u045c\u045d\u0007\u00ed\u0002\u0002\u045d\u045e",
    "\u0005\u0136\u009c\u0002\u045eG\u0003\u0002\u0002\u0002\u045f\u0460",
    "\u0007\u00fd\u0002\u0002\u0460\u0461\u0005\u0136\u009c\u0002\u0461I",
    "\u0003\u0002\u0002\u0002\u0462\u0463\t\u0010\u0002\u0002\u0463K\u0003",
    "\u0002\u0002\u0002\u0464\u0465\t\u0011\u0002\u0002\u0465M\u0003\u0002",
    "\u0002\u0002\u0466\u0467\t\u0012\u0002\u0002\u0467O\u0003\u0002\u0002",
    "\u0002\u0468\u0469\u0007\u00f3\u0002\u0002\u0469\u046a\u0007\u019b\u0002",
    "\u0002\u046a\u046b\t\u0013\u0002\u0002\u046bQ\u0003\u0002\u0002\u0002",
    "\u046c\u046d\u0007\u00ef\u0002\u0002\u046d\u0486\u0005\u0136\u009c\u0002",
    "\u046e\u046f\u0007\u017d\u0002\u0002\u046f\u0486\u0005\u0136\u009c\u0002",
    "\u0470\u0471\u0007\u00f1\u0002\u0002\u0471\u0474\u0007\u019b\u0002\u0002",
    "\u0472\u0475\u0005\u0146\u00a4\u0002\u0473\u0475\u0007\u0197\u0002\u0002",
    "\u0474\u0472\u0003\u0002\u0002\u0002\u0474\u0473\u0003\u0002\u0002\u0002",
    "\u0475\u0486\u0003\u0002\u0002\u0002\u0476\u0477\u0007\u00f0\u0002\u0002",
    "\u0477\u047a\u0007\u019b\u0002\u0002\u0478\u047b\u0005\u0146\u00a4\u0002",
    "\u0479\u047b\u0007\u0197\u0002\u0002\u047a\u0478\u0003\u0002\u0002\u0002",
    "\u047a\u0479\u0003\u0002\u0002\u0002\u047b\u0486\u0003\u0002\u0002\u0002",
    "\u047c\u047d\u0007\u0133\u0002\u0002\u047d\u047e\u0007\u019b\u0002\u0002",
    "\u047e\u0486\t\r\u0002\u0002\u047f\u0480\u0007\u017c\u0002\u0002\u0480",
    "\u0481\u0007\u019b\u0002\u0002\u0481\u0486\t\r\u0002\u0002\u0482\u0483",
    "\u0007\u017f\u0002\u0002\u0483\u0484\u0007\u019b\u0002\u0002\u0484\u0486",
    "\u0007\u0195\u0002\u0002\u0485\u046c\u0003\u0002\u0002\u0002\u0485\u046e",
    "\u0003\u0002\u0002\u0002\u0485\u0470\u0003\u0002\u0002\u0002\u0485\u0476",
    "\u0003\u0002\u0002\u0002\u0485\u047c\u0003\u0002\u0002\u0002\u0485\u047f",
    "\u0003\u0002\u0002\u0002\u0485\u0482\u0003\u0002\u0002\u0002\u0486S",
    "\u0003\u0002\u0002\u0002\u0487\u0488\u0007\u012f\u0002\u0002\u0488\u0489",
    "\t\r\u0002\u0002\u0489U\u0003\u0002\u0002\u0002\u048a\u048b\u0007\u0148",
    "\u0002\u0002\u048b\u048c\t\u0014\u0002\u0002\u048cW\u0003\u0002\u0002",
    "\u0002\u048d\u048e\u0007\u0156\u0002\u0002\u048e\u0494\t\u0015\u0002",
    "\u0002\u048f\u0490\u0007\u017b\u0002\u0002\u0490\u0494\u0005\u0136\u009c",
    "\u0002\u0491\u0492\u0007\u0147\u0002\u0002\u0492\u0494\t\u0016\u0002",
    "\u0002\u0493\u048d\u0003\u0002\u0002\u0002\u0493\u048f\u0003\u0002\u0002",
    "\u0002\u0493\u0491\u0003\u0002\u0002\u0002\u0494Y\u0003\u0002\u0002",
    "\u0002\u0495\u049c\u0007\u00fc\u0002\u0002\u0496\u049c\u0007\u00f9\u0002",
    "\u0002\u0497\u049c\u0007\u0134\u0002\u0002\u0498\u049c\u0007\u00fe\u0002",
    "\u0002\u0499\u049a\u0007\u0112\u0002\u0002\u049a\u049c\u0005\u0136\u009c",
    "\u0002\u049b\u0495\u0003\u0002\u0002\u0002\u049b\u0496\u0003\u0002\u0002",
    "\u0002\u049b\u0497\u0003\u0002\u0002\u0002\u049b\u0498\u0003\u0002\u0002",
    "\u0002\u049b\u0499\u0003\u0002\u0002\u0002\u049c[\u0003\u0002\u0002",
    "\u0002\u049d\u049e\u0007\u00c6\u0002\u0002\u049e\u04a3\u0005\u0136\u009c",
    "\u0002\u049f\u04a0\u0007\u0152\u0002\u0002\u04a0\u04a3\t\r\u0002\u0002",
    "\u04a1\u04a3\t\r\u0002\u0002\u04a2\u049d\u0003\u0002\u0002\u0002\u04a2",
    "\u049f\u0003\u0002\u0002\u0002\u04a2\u04a1\u0003\u0002\u0002\u0002\u04a3",
    "]\u0003\u0002\u0002\u0002\u04a4\u04a5\u0007\u00c8\u0002\u0002\u04a5",
    "\u04ba\u0005\u0136\u009c\u0002\u04a6\u04a7\u0007\u00c7\u0002\u0002\u04a7",
    "\u04ba\u0005\u0136\u009c\u0002\u04a8\u04a9\u0007\u00c9\u0002\u0002\u04a9",
    "\u04ba\u0005\u0136\u009c\u0002\u04aa\u04ab\u0007\u00ca\u0002\u0002\u04ab",
    "\u04ba\u0005\u0136\u009c\u0002\u04ac\u04ad\u0007\u00cc\u0002\u0002\u04ad",
    "\u04ba\u0005\u0136\u009c\u0002\u04ae\u04af\u0007\u00e0\u0002\u0002\u04af",
    "\u04b0\u0007\u019b\u0002\u0002\u04b0\u04ba\u0007\u0195\u0002\u0002\u04b1",
    "\u04b2\u0007\u00e2\u0002\u0002\u04b2\u04ba\u0005\u0136\u009c\u0002\u04b3",
    "\u04b4\u0007\u013d\u0002\u0002\u04b4\u04ba\u0005\u0136\u009c\u0002\u04b5",
    "\u04b6\u0007\u014e\u0002\u0002\u04b6\u04ba\u0005\u0136\u009c\u0002\u04b7",
    "\u04b8\u0007\u0157\u0002\u0002\u04b8\u04ba\u0005\u0136\u009c\u0002\u04b9",
    "\u04a4\u0003\u0002\u0002\u0002\u04b9\u04a6\u0003\u0002\u0002\u0002\u04b9",
    "\u04a8\u0003\u0002\u0002\u0002\u04b9\u04aa\u0003\u0002\u0002\u0002\u04b9",
    "\u04ac\u0003\u0002\u0002\u0002\u04b9\u04ae\u0003\u0002\u0002\u0002\u04b9",
    "\u04b1\u0003\u0002\u0002\u0002\u04b9\u04b3\u0003\u0002\u0002\u0002\u04b9",
    "\u04b5\u0003\u0002\u0002\u0002\u04b9\u04b7\u0003\u0002\u0002\u0002\u04ba",
    "_\u0003\u0002\u0002\u0002\u04bb\u04bc\u0007\u0175\u0002\u0002\u04bc",
    "\u04bd\u0007\u019b\u0002\u0002\u04bd\u04be\u0007\u0195\u0002\u0002\u04be",
    "\u04bf\t\u0017\u0002\u0002\u04bfa\u0003\u0002\u0002\u0002\u04c0\u04c1",
    "\u0007\u0094\u0002\u0002\u04c1\u04c2\u0007\u00c4\u0002\u0002\u04c2\u04c7",
    "\u0007\u0195\u0002\u0002\u04c3\u04c4\u0007\u0094\u0002\u0002\u04c4\u04c7",
    "\u0007\u0115\u0002\u0002\u04c5\u04c7\u0007\u013a\u0002\u0002\u04c6\u04c0",
    "\u0003\u0002\u0002\u0002\u04c6\u04c3\u0003\u0002\u0002\u0002\u04c6\u04c5",
    "\u0003\u0002\u0002\u0002\u04c7c\u0003\u0002\u0002\u0002\u04c8\u04c9",
    "\u0007:\u0002\u0002\u04c9\u04cc\u0007Z\u0002\u0002\u04ca\u04cb\u0007",
    "X\u0002\u0002\u04cb\u04cd\u0007B\u0002\u0002\u04cc\u04ca\u0003\u0002",
    "\u0002\u0002\u04cc\u04cd\u0003\u0002\u0002\u0002\u04cd\u04ce\u0003\u0002",
    "\u0002\u0002\u04ce\u04d1\u0005\u0146\u00a4\u0002\u04cf\u04d0\u0007s",
    "\u0002\u0002\u04d0\u04d2\u0005\u0128\u0095\u0002\u04d1\u04cf\u0003\u0002",
    "\u0002\u0002\u04d1\u04d2\u0003\u0002\u0002\u0002\u04d2\u04d4\u0003\u0002",
    "\u0002\u0002\u04d3\u04d5\u0007\u01af\u0002\u0002\u04d4\u04d3\u0003\u0002",
    "\u0002\u0002\u04d4\u04d5\u0003\u0002\u0002\u0002\u04d5e\u0003\u0002",
    "\u0002\u0002\u04d6\u04d7\u0007:\u0002\u0002\u04d7\u04da\u0007\u0086",
    "\u0002\u0002\u04d8\u04d9\u0007X\u0002\u0002\u04d9\u04db\u0007B\u0002",
    "\u0002\u04da\u04d8\u0003\u0002\u0002\u0002\u04da\u04db\u0003\u0002\u0002",
    "\u0002\u04db\u04dc\u0003\u0002\u0002\u0002\u04dc\u04de\u0005\u012c\u0097",
    "\u0002\u04dd\u04df\u0007\u01af\u0002\u0002\u04de\u04dd\u0003\u0002\u0002",
    "\u0002\u04de\u04df\u0003\u0002\u0002\u0002\u04dfg\u0003\u0002\u0002",
    "\u0002\u04e0\u04e1\u0007:\u0002\u0002\u04e1\u04e5\u0007\u00a4\u0002",
    "\u0002\u04e2\u04e3\u0005\u0128\u0095\u0002\u04e3\u04e4\u0007\u01a7\u0002",
    "\u0002\u04e4\u04e6\u0003\u0002\u0002\u0002\u04e5\u04e2\u0003\u0002\u0002",
    "\u0002\u04e5\u04e6\u0003\u0002\u0002\u0002\u04e6\u04e7\u0003\u0002\u0002",
    "\u0002\u04e7\u04e8\u0005\u0146\u00a4\u0002\u04e8\u04e9\u0007\u01af\u0002",
    "\u0002\u04e9i\u0003\u0002\u0002\u0002\u04ea\u04eb\u0007:\u0002\u0002",
    "\u04eb\u04ee\u0007\u00a6\u0002\u0002\u04ec\u04ed\u0007X\u0002\u0002",
    "\u04ed\u04ef\u0007B\u0002\u0002\u04ee\u04ec\u0003\u0002\u0002\u0002",
    "\u04ee\u04ef\u0003\u0002\u0002\u0002\u04ef\u04f0\u0003\u0002\u0002\u0002",
    "\u04f0\u04f2\u0005\u0128\u0095\u0002\u04f1\u04f3\u0007\u01af\u0002\u0002",
    "\u04f2\u04f1\u0003\u0002\u0002\u0002\u04f2\u04f3\u0003\u0002\u0002\u0002",
    "\u04f3k\u0003\u0002\u0002\u0002\u04f4\u04f5\u0007:\u0002\u0002\u04f5",
    "\u04f8\u0007\u00bb\u0002\u0002\u04f6\u04f7\u0007X\u0002\u0002\u04f7",
    "\u04f9\u0007B\u0002\u0002\u04f8\u04f6\u0003\u0002\u0002\u0002\u04f8",
    "\u04f9\u0003\u0002\u0002\u0002\u04f9\u04fa\u0003\u0002\u0002\u0002\u04fa",
    "\u04ff\u0005\u012a\u0096\u0002\u04fb\u04fc\u0007\u01ae\u0002\u0002\u04fc",
    "\u04fe\u0005\u012a\u0096\u0002\u04fd\u04fb\u0003\u0002\u0002\u0002\u04fe",
    "\u0501\u0003\u0002\u0002\u0002\u04ff\u04fd\u0003\u0002\u0002\u0002\u04ff",
    "\u0500\u0003\u0002\u0002\u0002\u0500\u0503\u0003\u0002\u0002\u0002\u0501",
    "\u04ff\u0003\u0002\u0002\u0002\u0502\u0504\u0007\u01af\u0002\u0002\u0503",
    "\u0502\u0003\u0002\u0002\u0002\u0503\u0504\u0003\u0002\u0002\u0002\u0504",
    "m\u0003\u0002\u0002\u0002\u0505\u0506\u0007&\u0002\u0002\u0506\u0507",
    "\u0007\u0180\u0002\u0002\u0507\u0508\u0005\u012a\u0096\u0002\u0508\u0509",
    "\u0007N\u0002\u0002\u0509\u050a\u0005\u013e\u00a0\u0002\u050a\u050b",
    "\u0005\u0140\u00a1\u0002\u050bo\u0003\u0002\u0002\u0002\u050c\u050d",
    "\u0007:\u0002\u0002\u050d\u0510\u0007\u0180\u0002\u0002\u050e\u050f",
    "\u0007X\u0002\u0002\u050f\u0511\u0007B\u0002\u0002\u0510\u050e\u0003",
    "\u0002\u0002\u0002\u0510\u0511\u0003\u0002\u0002\u0002\u0511\u0512\u0003",
    "\u0002\u0002\u0002\u0512\u0513\u0005\u012a\u0096\u0002\u0513q\u0003",
    "\u0002\u0002\u0002\u0514\u0517\u0005t;\u0002\u0515\u0517\u0005v<\u0002",
    "\u0516\u0514\u0003\u0002\u0002\u0002\u0516\u0515\u0003\u0002\u0002\u0002",
    "\u0517s\u0003\u0002\u0002\u0002\u0518\u0519\u0007v\u0002\u0002\u0519",
    "\u051a\u0007\u01ac\u0002\u0002\u051a\u051b\u0005\u0146\u00a4\u0002\u051b",
    "\u051c\u0007\u01ae\u0002\u0002\u051c\u051d\u0007\u0197\u0002\u0002\u051d",
    "\u051e\u0007\u01ad\u0002\u0002\u051eu\u0003\u0002\u0002\u0002\u051f",
    "\u0520\u0007u\u0002\u0002\u0520\u0521\u0007\u01ac\u0002\u0002\u0521",
    "\u0522\u0007\u0197\u0002\u0002\u0522\u0523\u0007\u01ae\u0002\u0002\u0523",
    "\u0524\u0007\u0197\u0002\u0002\u0524\u0525\u0007\u01ad\u0002\u0002\u0525",
    "\u0527\u0007\u01a7\u0002\u0002\u0526\u0528\u0005\u0146\u00a4\u0002\u0527",
    "\u0526\u0003\u0002\u0002\u0002\u0527\u0528\u0003\u0002\u0002\u0002\u0528",
    "\u0529\u0003\u0002\u0002\u0002\u0529\u052b\u0007\u01a7\u0002\u0002\u052a",
    "\u052c\u0005\u0146\u00a4\u0002\u052b\u052a\u0003\u0002\u0002\u0002\u052b",
    "\u052c\u0003\u0002\u0002\u0002\u052c\u052d\u0003\u0002\u0002\u0002\u052d",
    "\u052e\u0007\u01a7\u0002\u0002\u052e\u052f\u0005\u0146\u00a4\u0002\u052f",
    "w\u0003\u0002\u0002\u0002\u0530\u0531\u00071\u0002\u0002\u0531\u0533",
    "\u0007\u0194\u0002\u0002\u0532\u0534\u0007\t\u0002\u0002\u0533\u0532",
    "\u0003\u0002\u0002\u0002\u0533\u0534\u0003\u0002\u0002\u0002\u0534\u0535",
    "\u0003\u0002\u0002\u0002\u0535\u0537\u0005\u0092J\u0002\u0536\u0538",
    "\u0007\u01af\u0002\u0002\u0537\u0536\u0003\u0002\u0002\u0002\u0537\u0538",
    "\u0003\u0002\u0002\u0002\u0538\u0546\u0003\u0002\u0002\u0002\u0539\u053a",
    "\u00071\u0002\u0002\u053a\u053f\u0005\u0090I\u0002\u053b\u053c\u0007",
    "\u01ae\u0002\u0002\u053c\u053e\u0005\u0090I\u0002\u053d\u053b\u0003",
    "\u0002\u0002\u0002\u053e\u0541\u0003\u0002\u0002\u0002\u053f\u053d\u0003",
    "\u0002\u0002\u0002\u053f\u0540\u0003\u0002\u0002\u0002\u0540\u0543\u0003",
    "\u0002\u0002\u0002\u0541\u053f\u0003\u0002\u0002\u0002\u0542\u0544\u0007",
    "\u01af\u0002\u0002\u0543\u0542\u0003\u0002\u0002\u0002\u0543\u0544\u0003",
    "\u0002\u0002\u0002\u0544\u0546\u0003\u0002\u0002\u0002\u0545\u0530\u0003",
    "\u0002\u0002\u0002\u0545\u0539\u0003\u0002\u0002\u0002\u0546y\u0003",
    "\u0002\u0002\u0002\u0547\u0549\u0007\u0019\u0002\u0002\u0548\u054a\u0007",
    "\u010c\u0002\u0002\u0549\u0548\u0003\u0002\u0002\u0002\u0549\u054a\u0003",
    "\u0002\u0002\u0002\u054a\u054b\u0003\u0002\u0002\u0002\u054b\u054d\u0005",
    "\u0134\u009b\u0002\u054c\u054e\u0007\u01af\u0002\u0002\u054d\u054c\u0003",
    "\u0002\u0002\u0002\u054d\u054e\u0003\u0002\u0002\u0002\u054e\u0562\u0003",
    "\u0002\u0002\u0002\u054f\u0551\u00070\u0002\u0002\u0550\u0552\u0007",
    "\u010c\u0002\u0002\u0551\u0550\u0003\u0002\u0002\u0002\u0551\u0552\u0003",
    "\u0002\u0002\u0002\u0552\u0553\u0003\u0002\u0002\u0002\u0553\u0555\u0005",
    "\u0134\u009b\u0002\u0554\u0556\u0007\u01af\u0002\u0002\u0555\u0554\u0003",
    "\u0002\u0002\u0002\u0555\u0556\u0003\u0002\u0002\u0002\u0556\u0562\u0003",
    "\u0002\u0002\u0002\u0557\u0562\u0005\u00a2R\u0002\u0558\u0562\u0005",
    "\u00a6T\u0002\u0559\u055b\u0007t\u0002\u0002\u055a\u055c\u0007\u010c",
    "\u0002\u0002\u055b\u055a\u0003\u0002\u0002\u0002\u055b\u055c\u0003\u0002",
    "\u0002\u0002\u055c\u055d\u0003\u0002\u0002\u0002\u055d\u055f\u0005\u0134",
    "\u009b\u0002\u055e\u0560\u0007\u01af\u0002\u0002\u055f\u055e\u0003\u0002",
    "\u0002\u0002\u055f\u0560\u0003\u0002\u0002\u0002\u0560\u0562\u0003\u0002",
    "\u0002\u0002\u0561\u0547\u0003\u0002\u0002\u0002\u0561\u054f\u0003\u0002",
    "\u0002\u0002\u0561\u0557\u0003\u0002\u0002\u0002\u0561\u0558\u0003\u0002",
    "\u0002\u0002\u0561\u0559\u0003\u0002\u0002\u0002\u0562{\u0003\u0002",
    "\u0002\u0002\u0563\u0566\u0007A\u0002\u0002\u0564\u0565\u0007\u0194",
    "\u0002\u0002\u0565\u0567\u0007\u019b\u0002\u0002\u0566\u0564\u0003\u0002",
    "\u0002\u0002\u0566\u0567\u0003\u0002\u0002\u0002\u0567\u0568\u0003\u0002",
    "\u0002\u0002\u0568\u0571\u0005\u012c\u0097\u0002\u0569\u056e\u0005~",
    "@\u0002\u056a\u056b\u0007\u01ae\u0002\u0002\u056b\u056d\u0005~@\u0002",
    "\u056c\u056a\u0003\u0002\u0002\u0002\u056d\u0570\u0003\u0002\u0002\u0002",
    "\u056e\u056c\u0003\u0002\u0002\u0002\u056e\u056f\u0003\u0002\u0002\u0002",
    "\u056f\u0572\u0003\u0002\u0002\u0002\u0570\u056e\u0003\u0002\u0002\u0002",
    "\u0571\u0569\u0003\u0002\u0002\u0002\u0571\u0572\u0003\u0002\u0002\u0002",
    "\u0572\u0574\u0003\u0002\u0002\u0002\u0573\u0575\u0007\u01af\u0002\u0002",
    "\u0574\u0573\u0003\u0002\u0002\u0002\u0574\u0575\u0003\u0002\u0002\u0002",
    "\u0575\u058d\u0003\u0002\u0002\u0002\u0576\u0577\u0007A\u0002\u0002",
    "\u0577\u0578\u0007\u01ac\u0002\u0002\u0578\u057d\u0005\u0080A\u0002",
    "\u0579\u057a\u0007\u01b4\u0002\u0002\u057a\u057c\u0005\u0080A\u0002",
    "\u057b\u0579\u0003\u0002\u0002\u0002\u057c\u057f\u0003\u0002\u0002\u0002",
    "\u057d\u057b\u0003\u0002\u0002\u0002\u057d\u057e\u0003\u0002\u0002\u0002",
    "\u057e\u0580\u0003\u0002\u0002\u0002\u057f\u057d\u0003\u0002\u0002\u0002",
    "\u0580\u0587\u0007\u01ad\u0002\u0002\u0581\u0583\u0007\t\u0002\u0002",
    "\u0582\u0581\u0003\u0002\u0002\u0002\u0582\u0583\u0003\u0002\u0002\u0002",
    "\u0583\u0584\u0003\u0002\u0002\u0002\u0584\u0585\t\u0018\u0002\u0002",
    "\u0585\u0586\u0007\u019b\u0002\u0002\u0586\u0588\u0007\u0197\u0002\u0002",
    "\u0587\u0582\u0003\u0002\u0002\u0002\u0587\u0588\u0003\u0002\u0002\u0002",
    "\u0588\u058a\u0003\u0002\u0002\u0002\u0589\u058b\u0007\u01af\u0002\u0002",
    "\u058a\u0589\u0003\u0002\u0002\u0002\u058a\u058b\u0003\u0002\u0002\u0002",
    "\u058b\u058d\u0003\u0002\u0002\u0002\u058c\u0563\u0003\u0002\u0002\u0002",
    "\u058c\u0576\u0003\u0002\u0002\u0002\u058d}\u0003\u0002\u0002\u0002",
    "\u058e\u058f\u0007\u0194\u0002\u0002\u058f\u0591\u0007\u019b\u0002\u0002",
    "\u0590\u058e\u0003\u0002\u0002\u0002\u0590\u0591\u0003\u0002\u0002\u0002",
    "\u0591\u059b\u0003\u0002\u0002\u0002\u0592\u0595\u0005\u00aaV\u0002",
    "\u0593\u0595\u0005\u0146\u00a4\u0002\u0594\u0592\u0003\u0002\u0002\u0002",
    "\u0594\u0593\u0003\u0002\u0002\u0002\u0595\u0597\u0003\u0002\u0002\u0002",
    "\u0596\u0598\t\u0019\u0002\u0002\u0597\u0596\u0003\u0002\u0002\u0002",
    "\u0597\u0598\u0003\u0002\u0002\u0002\u0598\u059c\u0003\u0002\u0002\u0002",
    "\u0599\u059c\u00072\u0002\u0002\u059a\u059c\u0007n\u0002\u0002\u059b",
    "\u0594\u0003\u0002\u0002\u0002\u059b\u0599\u0003\u0002\u0002\u0002\u059b",
    "\u059a\u0003\u0002\u0002\u0002\u059c\u007f\u0003\u0002\u0002\u0002\u059d",
    "\u059e\t\u0003\u0002\u0002\u059e\u0081\u0003\u0002\u0002\u0002\u059f",
    "\u05a1\u0005\u008eH\u0002\u05a0\u05a2\u0007\u01af\u0002\u0002\u05a1",
    "\u05a0\u0003\u0002\u0002\u0002\u05a1\u05a2\u0003\u0002\u0002\u0002\u05a2",
    "\u05d0\u0003\u0002\u0002\u0002\u05a3\u05af\u0007R\u0002\u0002\u05a4",
    "\u05a6\u0007\u0005\u0002\u0002\u05a5\u05a7\u0007\u014d\u0002\u0002\u05a6",
    "\u05a5\u0003\u0002\u0002\u0002\u05a6\u05a7\u0003\u0002\u0002\u0002\u05a7",
    "\u05b0\u0003\u0002\u0002\u0002\u05a8\u05ad\u0005\u0084C\u0002\u05a9",
    "\u05aa\u0007\u01ac\u0002\u0002\u05aa\u05ab\u0005\u0132\u009a\u0002\u05ab",
    "\u05ac\u0007\u01ad\u0002\u0002\u05ac\u05ae\u0003\u0002\u0002\u0002\u05ad",
    "\u05a9\u0003\u0002\u0002\u0002\u05ad\u05ae\u0003\u0002\u0002\u0002\u05ae",
    "\u05b0\u0003\u0002\u0002\u0002\u05af\u05a4\u0003\u0002\u0002\u0002\u05af",
    "\u05a8\u0003\u0002\u0002\u0002\u05b0\u05b3\u0003\u0002\u0002\u0002\u05b1",
    "\u05b2\u0007s\u0002\u0002\u05b2\u05b4\u0005\u0128\u0095\u0002\u05b3",
    "\u05b1\u0003\u0002\u0002\u0002\u05b3\u05b4\u0003\u0002\u0002\u0002\u05b4",
    "\u05b5\u0003\u0002\u0002\u0002\u05b5\u05b6\u0007\u00aa\u0002\u0002\u05b6",
    "\u05ba\u0005\u0146\u00a4\u0002\u05b7\u05b8\u0007\u00c0\u0002\u0002\u05b8",
    "\u05b9\u0007R\u0002\u0002\u05b9\u05bb\u0007y\u0002\u0002\u05ba\u05b7",
    "\u0003\u0002\u0002\u0002\u05ba\u05bb\u0003\u0002\u0002\u0002\u05bb\u05be",
    "\u0003\u0002\u0002\u0002\u05bc\u05bd\u0007\t\u0002\u0002\u05bd\u05bf",
    "\u0005\u0146\u00a4\u0002\u05be\u05bc\u0003\u0002\u0002\u0002\u05be\u05bf",
    "\u0003\u0002\u0002\u0002\u05bf\u05c1\u0003\u0002\u0002\u0002\u05c0\u05c2",
    "\u0007\u01af\u0002\u0002\u05c1\u05c0\u0003\u0002\u0002\u0002\u05c1\u05c2",
    "\u0003\u0002\u0002\u0002\u05c2\u05d0\u0003\u0002\u0002\u0002\u05c3\u05ca",
    "\u0007\u0091\u0002\u0002\u05c4\u05c5\u0007\u01ac\u0002\u0002\u05c5\u05c6",
    "\u0007\u00c0\u0002\u0002\u05c6\u05c7\u0007\u00e4\u0002\u0002\u05c7\u05c8",
    "\u0007\u019b\u0002\u0002\u05c8\u05c9\u0007\u0194\u0002\u0002\u05c9\u05cb",
    "\u0007\u01ad\u0002\u0002\u05ca\u05c4\u0003\u0002\u0002\u0002\u05ca\u05cb",
    "\u0003\u0002\u0002\u0002\u05cb\u05cd\u0003\u0002\u0002\u0002\u05cc\u05ce",
    "\u0007\u01af\u0002\u0002\u05cd\u05cc\u0003\u0002\u0002\u0002\u05cd\u05ce",
    "\u0003\u0002\u0002\u0002\u05ce\u05d0\u0003\u0002\u0002\u0002\u05cf\u059f",
    "\u0003\u0002\u0002\u0002\u05cf\u05a3\u0003\u0002\u0002\u0002\u05cf\u05c3",
    "\u0003\u0002\u0002\u0002\u05d0\u0083\u0003\u0002\u0002\u0002\u05d1\u05ec",
    "\u0007A\u0002\u0002\u05d2\u05d3\u0007\u00bb\u0002\u0002\u05d3\u05ec",
    "\u0005\u0146\u00a4\u0002\u05d4\u05d5\u0007\u0174\u0002\u0002\u05d5\u05ec",
    "\u0005\u0146\u00a4\u0002\u05d6\u05d8\u0007\u00e3\u0002\u0002\u05d7\u05d9",
    "\u0005\u0146\u00a4\u0002\u05d8\u05d7\u0003\u0002\u0002\u0002\u05d8\u05d9",
    "\u0003\u0002\u0002\u0002\u05d9\u05ec\u0003\u0002\u0002\u0002\u05da\u05db",
    "\u0007&\u0002\u0002\u05db\u05ec\t\u001a\u0002\u0002\u05dc\u05ec\u0007",
    "\u0169\u0002\u0002\u05dd\u05ec\u0007\u0116\u0002\u0002\u05de\u05ec\u0007",
    "\u009b\u0002\u0002\u05df\u05ec\u0007\u008c\u0002\u0002\u05e0\u05ec\u0007",
    "\\\u0002\u0002\u05e1\u05e9\u0007\u0006\u0002\u0002\u05e2\u05e4\u0007",
    "\b\u0002\u0002\u05e3\u05e2\u0003\u0002\u0002\u0002\u05e3\u05e4\u0003",
    "\u0002\u0002\u0002\u05e4\u05e7\u0003\u0002\u0002\u0002\u05e5\u05e8\u0005",
    "\u0146\u00a4\u0002\u05e6\u05e8\u0007.\u0002\u0002\u05e7\u05e5\u0003",
    "\u0002\u0002\u0002\u05e7\u05e6\u0003\u0002\u0002\u0002\u05e8\u05ea\u0003",
    "\u0002\u0002\u0002\u05e9\u05e3\u0003\u0002\u0002\u0002\u05e9\u05ea\u0003",
    "\u0002\u0002\u0002\u05ea\u05ec\u0003\u0002\u0002\u0002\u05eb\u05d1\u0003",
    "\u0002\u0002\u0002\u05eb\u05d2\u0003\u0002\u0002\u0002\u05eb\u05d4\u0003",
    "\u0002\u0002\u0002\u05eb\u05d6\u0003\u0002\u0002\u0002\u05eb\u05da\u0003",
    "\u0002\u0002\u0002\u05eb\u05dc\u0003\u0002\u0002\u0002\u05eb\u05dd\u0003",
    "\u0002\u0002\u0002\u05eb\u05de\u0003\u0002\u0002\u0002\u05eb\u05df\u0003",
    "\u0002\u0002\u0002\u05eb\u05e0\u0003\u0002\u0002\u0002\u05eb\u05e1\u0003",
    "\u0002\u0002\u0002\u05ec\u0085\u0003\u0002\u0002\u0002\u05ed\u05ee\u0007",
    "\u00a0\u0002\u0002\u05ee\u05f1\u0007\u0194\u0002\u0002\u05ef\u05f0\u0007",
    "\u01a7\u0002\u0002\u05f0\u05f2\u0005\u0146\u00a4\u0002\u05f1\u05ef\u0003",
    "\u0002\u0002\u0002\u05f1\u05f2\u0003\u0002\u0002\u0002\u05f2\u05f3\u0003",
    "\u0002\u0002\u0002\u05f3\u05f4\u0007\u019b\u0002\u0002\u05f4\u05f6\u0005",
    "\u00acW\u0002\u05f5\u05f7\u0007\u01af\u0002\u0002\u05f6\u05f5\u0003",
    "\u0002\u0002\u0002\u05f6\u05f7\u0003\u0002\u0002\u0002\u05f7\u0615\u0003",
    "\u0002\u0002\u0002\u05f8\u05f9\u0007\u00a0\u0002\u0002\u05f9\u05fa\u0007",
    "\u0194\u0002\u0002\u05fa\u05fb\u0005\u014c\u00a7\u0002\u05fb\u05fd\u0005",
    "\u00acW\u0002\u05fc\u05fe\u0007\u01af\u0002\u0002\u05fd\u05fc\u0003",
    "\u0002\u0002\u0002\u05fd\u05fe\u0003\u0002\u0002\u0002\u05fe\u0615\u0003",
    "\u0002\u0002\u0002\u05ff\u0600\u0007\u00a0\u0002\u0002\u0600\u0601\u0007",
    "\u0194\u0002\u0002\u0601\u0602\u0007\u019b\u0002\u0002\u0602\u0603\u0007",
    "-\u0002\u0002\u0603\u060e\u0005\u00a4S\u0002\u0604\u060c\u0007I\u0002",
    "\u0002\u0605\u0606\u0007\u0089\u0002\u0002\u0606\u060d\u0007\u0141\u0002",
    "\u0002\u0607\u060a\u0007\u00b5\u0002\u0002\u0608\u0609\u0007p\u0002",
    "\u0002\u0609\u060b\u0005\u0132\u009a\u0002\u060a\u0608\u0003\u0002\u0002",
    "\u0002\u060a\u060b\u0003\u0002\u0002\u0002\u060b\u060d\u0003\u0002\u0002",
    "\u0002\u060c\u0605\u0003\u0002\u0002\u0002\u060c\u0607\u0003\u0002\u0002",
    "\u0002\u060d\u060f\u0003\u0002\u0002\u0002\u060e\u0604\u0003\u0002\u0002",
    "\u0002\u060e\u060f\u0003\u0002\u0002\u0002\u060f\u0611\u0003\u0002\u0002",
    "\u0002\u0610\u0612\u0007\u01af\u0002\u0002\u0611\u0610\u0003\u0002\u0002",
    "\u0002\u0611\u0612\u0003\u0002\u0002\u0002\u0612\u0615\u0003\u0002\u0002",
    "\u0002\u0613\u0615\u0005\u00a8U\u0002\u0614\u05ed\u0003\u0002\u0002",
    "\u0002\u0614\u05f8\u0003\u0002\u0002\u0002\u0614\u05ff\u0003\u0002\u0002",
    "\u0002\u0614\u0613\u0003\u0002\u0002\u0002\u0615\u0087\u0003\u0002\u0002",
    "\u0002\u0616\u0617\u0007\r\u0002\u0002\u0617\u0618\u00078\u0002\u0002",
    "\u0618\u061b\t\u001b\u0002\u0002\u0619\u061c\u0005\u0146\u00a4\u0002",
    "\u061a\u061c\u0007\u0194\u0002\u0002\u061b\u0619\u0003\u0002\u0002\u0002",
    "\u061b\u061a\u0003\u0002\u0002\u0002\u061b\u061c\u0003\u0002\u0002\u0002",
    "\u061c\u061e\u0003\u0002\u0002\u0002\u061d\u061f\u0007\u01af\u0002\u0002",
    "\u061e\u061d\u0003\u0002\u0002\u0002\u061e\u061f\u0003\u0002\u0002\u0002",
    "\u061f\u0664\u0003\u0002\u0002\u0002\u0620\u0621\u0007\r\u0002\u0002",
    "\u0621\u062b\t\u001b\u0002\u0002\u0622\u0625\u0005\u0146\u00a4\u0002",
    "\u0623\u0625\u0007\u0194\u0002\u0002\u0624\u0622\u0003\u0002\u0002\u0002",
    "\u0624\u0623\u0003\u0002\u0002\u0002\u0625\u0629\u0003\u0002\u0002\u0002",
    "\u0626\u0627\u0007\u00c0\u0002\u0002\u0627\u0628\u0007\u0125\u0002\u0002",
    "\u0628\u062a\u0007\u0197\u0002\u0002\u0629\u0626\u0003\u0002\u0002\u0002",
    "\u0629\u062a\u0003\u0002\u0002\u0002\u062a\u062c\u0003\u0002\u0002\u0002",
    "\u062b\u0624\u0003\u0002\u0002\u0002\u062b\u062c\u0003\u0002\u0002\u0002",
    "\u062c\u062e\u0003\u0002\u0002\u0002\u062d\u062f\u0007\u01af\u0002\u0002",
    "\u062e\u062d\u0003\u0002\u0002\u0002\u062e\u062f\u0003\u0002\u0002\u0002",
    "\u062f\u0664\u0003\u0002\u0002\u0002\u0630\u0631\u0007\u001e\u0002\u0002",
    "\u0631\u063e\t\u001b\u0002\u0002\u0632\u0635\u0005\u0146\u00a4\u0002",
    "\u0633\u0635\u0007\u0194\u0002\u0002\u0634\u0632\u0003\u0002\u0002\u0002",
    "\u0634\u0633\u0003\u0002\u0002\u0002\u0635\u063c\u0003\u0002\u0002\u0002",
    "\u0636\u0637\u0007\u00c0\u0002\u0002\u0637\u0638\u0007\u01ac\u0002\u0002",
    "\u0638\u0639\u0007\u00f3\u0002\u0002\u0639\u063a\u0007\u019b\u0002\u0002",
    "\u063a\u063b\t\r\u0002\u0002\u063b\u063d\u0007\u01ad\u0002\u0002\u063c",
    "\u0636\u0003\u0002\u0002\u0002\u063c\u063d\u0003\u0002\u0002\u0002\u063d",
    "\u063f\u0003\u0002\u0002\u0002\u063e\u0634\u0003\u0002\u0002\u0002\u063e",
    "\u063f\u0003\u0002\u0002\u0002\u063f\u0641\u0003\u0002\u0002\u0002\u0640",
    "\u0642\u0007\u01af\u0002\u0002\u0641\u0640\u0003\u0002\u0002\u0002\u0641",
    "\u0642\u0003\u0002\u0002\u0002\u0642\u0664\u0003\u0002\u0002\u0002\u0643",
    "\u0645\u0007\u001e\u0002\u0002\u0644\u0646\u0007\u018b\u0002\u0002\u0645",
    "\u0644\u0003\u0002\u0002\u0002\u0645\u0646\u0003\u0002\u0002\u0002\u0646",
    "\u0648\u0003\u0002\u0002\u0002\u0647\u0649\u0007\u01af\u0002\u0002\u0648",
    "\u0647\u0003\u0002\u0002\u0002\u0648\u0649\u0003\u0002\u0002\u0002\u0649",
    "\u0664\u0003\u0002\u0002\u0002\u064a\u064b\u0007\u0094\u0002\u0002\u064b",
    "\u064e\t\u001b\u0002\u0002\u064c\u064f\u0005\u0146\u00a4\u0002\u064d",
    "\u064f\u0007\u0194\u0002\u0002\u064e\u064c\u0003\u0002\u0002\u0002\u064e",
    "\u064d\u0003\u0002\u0002\u0002\u064e\u064f\u0003\u0002\u0002\u0002\u064f",
    "\u0651\u0003\u0002\u0002\u0002\u0650\u0652\u0007\u01af\u0002\u0002\u0651",
    "\u0650\u0003\u0002\u0002\u0002\u0651\u0652\u0003\u0002\u0002\u0002\u0652",
    "\u0664\u0003\u0002\u0002\u0002\u0653\u0655\u0007\u0094\u0002\u0002\u0654",
    "\u0656\u0007\u018b\u0002\u0002\u0655\u0654\u0003\u0002\u0002\u0002\u0655",
    "\u0656\u0003\u0002\u0002\u0002\u0656\u0658\u0003\u0002\u0002\u0002\u0657",
    "\u0659\u0007\u01af\u0002\u0002\u0658\u0657\u0003\u0002\u0002\u0002\u0658",
    "\u0659\u0003\u0002\u0002\u0002\u0659\u0664\u0003\u0002\u0002\u0002\u065a",
    "\u065b\u0007\u0098\u0002\u0002\u065b\u065e\t\u001b\u0002\u0002\u065c",
    "\u065f\u0005\u0146\u00a4\u0002\u065d\u065f\u0007\u0194\u0002\u0002\u065e",
    "\u065c\u0003\u0002\u0002\u0002\u065e\u065d\u0003\u0002\u0002\u0002\u065e",
    "\u065f\u0003\u0002\u0002\u0002\u065f\u0661\u0003\u0002\u0002\u0002\u0660",
    "\u0662\u0007\u01af\u0002\u0002\u0661\u0660\u0003\u0002\u0002\u0002\u0661",
    "\u0662\u0003\u0002\u0002\u0002\u0662\u0664\u0003\u0002\u0002\u0002\u0663",
    "\u0616\u0003\u0002\u0002\u0002\u0663\u0620\u0003\u0002\u0002\u0002\u0663",
    "\u0630\u0003\u0002\u0002\u0002\u0663\u0643\u0003\u0002\u0002\u0002\u0663",
    "\u064a\u0003\u0002\u0002\u0002\u0663\u0653\u0003\u0002\u0002\u0002\u0663",
    "\u065a\u0003\u0002\u0002\u0002\u0664\u0089\u0003\u0002\u0002\u0002\u0665",
    "\u0667\u0007\u010d\u0002\u0002\u0666\u0668\u0007\u0195\u0002\u0002\u0667",
    "\u0666\u0003\u0002\u0002\u0002\u0667\u0668\u0003\u0002\u0002\u0002\u0668",
    "\u008b\u0003\u0002\u0002\u0002\u0669\u066a\u0007\u00b7\u0002\u0002\u066a",
    "\u066c\u0005\u0146\u00a4\u0002\u066b\u066d\u0007\u01af\u0002\u0002\u066c",
    "\u066b\u0003\u0002\u0002\u0002\u066c\u066d\u0003\u0002\u0002\u0002\u066d",
    "\u008d\u0003\u0002\u0002\u0002\u066e\u066f\u0007A\u0002\u0002\u066f",
    "\u0670\u0007\t\u0002\u0002\u0670\u0671\t\u001c\u0002\u0002\u0671\u008f",
    "\u0003\u0002\u0002\u0002\u0672\u0674\u0007\u0194\u0002\u0002\u0673\u0675",
    "\u0007\t\u0002\u0002\u0674\u0673\u0003\u0002\u0002\u0002\u0674\u0675",
    "\u0003\u0002\u0002\u0002\u0675\u0676\u0003\u0002\u0002\u0002\u0676\u0679",
    "\u0005\u013e\u00a0\u0002\u0677\u0678\u0007\u019b\u0002\u0002\u0678\u067a",
    "\u0005\u00acW\u0002\u0679\u0677\u0003\u0002\u0002\u0002\u0679\u067a",
    "\u0003\u0002\u0002\u0002\u067a\u0091\u0003\u0002\u0002\u0002\u067b\u067c",
    "\u0007\u00a6\u0002\u0002\u067c\u067d\u0007\u01ac\u0002\u0002\u067d\u067e",
    "\u0005\u0094K\u0002\u067e\u067f\u0007\u01ad\u0002\u0002\u067f\u0093",
    "\u0003\u0002\u0002\u0002\u0680\u0687\u0005\u0096L\u0002\u0681\u0683",
    "\u0007\u01ae\u0002\u0002\u0682\u0681\u0003\u0002\u0002\u0002\u0682\u0683",
    "\u0003\u0002\u0002\u0002\u0683\u0684\u0003\u0002\u0002\u0002\u0684\u0686",
    "\u0005\u0096L\u0002\u0685\u0682\u0003\u0002\u0002\u0002\u0686\u0689",
    "\u0003\u0002\u0002\u0002\u0687\u0685\u0003\u0002\u0002\u0002\u0687\u0688",
    "\u0003\u0002\u0002\u0002\u0688\u0095\u0003\u0002\u0002\u0002\u0689\u0687",
    "\u0003\u0002\u0002\u0002\u068a\u068d\u0005\u0098M\u0002\u068b\u068d",
    "\u0005\u009cO\u0002\u068c\u068a\u0003\u0002\u0002\u0002\u068c\u068b",
    "\u0003\u0002\u0002\u0002\u068d\u0097\u0003\u0002\u0002\u0002\u068e\u0692",
    "\u0005\u0146\u00a4\u0002\u068f\u0693\u0005\u013e\u00a0\u0002\u0690\u0691",
    "\u0007\t\u0002\u0002\u0691\u0693\u0005\u00acW\u0002\u0692\u068f\u0003",
    "\u0002\u0002\u0002\u0692\u0690\u0003\u0002\u0002\u0002\u0693\u0696\u0003",
    "\u0002\u0002\u0002\u0694\u0695\u0007\u001c\u0002\u0002\u0695\u0697\u0005",
    "\u0146\u00a4\u0002\u0696\u0694\u0003\u0002\u0002\u0002\u0696\u0697\u0003",
    "\u0002\u0002\u0002\u0697\u0699\u0003\u0002\u0002\u0002\u0698\u069a\u0005",
    "\u013a\u009e\u0002\u0699\u0698\u0003\u0002\u0002\u0002\u0699\u069a\u0003",
    "\u0002\u0002\u0002\u069a\u06b2\u0003\u0002\u0002\u0002\u069b\u069c\u0007",
    " \u0002\u0002\u069c\u069e\u0005\u0146\u00a4\u0002\u069d\u069b\u0003",
    "\u0002\u0002\u0002\u069d\u069e\u0003\u0002\u0002\u0002\u069e\u069f\u0003",
    "\u0002\u0002\u0002\u069f\u06a0\u00072\u0002\u0002\u06a0\u06a3\u0005",
    "\u00aeX\u0002\u06a1\u06a2\u0007\u00c0\u0002\u0002\u06a2\u06a4\u0007",
    "\u00b9\u0002\u0002\u06a3\u06a1\u0003\u0002\u0002\u0002\u06a3\u06a4\u0003",
    "\u0002\u0002\u0002\u06a4\u06b3\u0003\u0002\u0002\u0002\u06a5\u06ab\u0007",
    "U\u0002\u0002\u06a6\u06a7\u0007\u01ac\u0002\u0002\u06a7\u06a8\u0007",
    "\u0195\u0002\u0002\u06a8\u06a9\u0007\u01ae\u0002\u0002\u06a9\u06aa\u0007",
    "\u0195\u0002\u0002\u06aa\u06ac\u0007\u01ad\u0002\u0002\u06ab\u06a6\u0003",
    "\u0002\u0002\u0002\u06ab\u06ac\u0003\u0002\u0002\u0002\u06ac\u06b0\u0003",
    "\u0002\u0002\u0002\u06ad\u06ae\u0007m\u0002\u0002\u06ae\u06af\u0007",
    "I\u0002\u0002\u06af\u06b1\u0007\u008d\u0002\u0002\u06b0\u06ad\u0003",
    "\u0002\u0002\u0002\u06b0\u06b1\u0003\u0002\u0002\u0002\u06b1\u06b3\u0003",
    "\u0002\u0002\u0002\u06b2\u069d\u0003\u0002\u0002\u0002\u06b2\u06a5\u0003",
    "\u0002\u0002\u0002\u06b2\u06b3\u0003\u0002\u0002\u0002\u06b3\u06b5\u0003",
    "\u0002\u0002\u0002\u06b4\u06b6\u0007\u0096\u0002\u0002\u06b5\u06b4\u0003",
    "\u0002\u0002\u0002\u06b5\u06b6\u0003\u0002\u0002\u0002\u06b6\u06ba\u0003",
    "\u0002\u0002\u0002\u06b7\u06b9\u0005\u009aN\u0002\u06b8\u06b7\u0003",
    "\u0002\u0002\u0002\u06b9\u06bc\u0003\u0002\u0002\u0002\u06ba\u06b8\u0003",
    "\u0002\u0002\u0002\u06ba\u06bb\u0003\u0002\u0002\u0002\u06bb\u0099\u0003",
    "\u0002\u0002\u0002\u06bc\u06ba\u0003\u0002\u0002\u0002\u06bd\u06be\u0007",
    " \u0002\u0002\u06be\u06c0\u0005\u0146\u00a4\u0002\u06bf\u06bd\u0003",
    "\u0002\u0002\u0002\u06bf\u06c0\u0003\u0002\u0002\u0002\u06c0\u06c2\u0003",
    "\u0002\u0002\u0002\u06c1\u06c3\u0005\u013a\u009e\u0002\u06c2\u06c1\u0003",
    "\u0002\u0002\u0002\u06c2\u06c3\u0003\u0002\u0002\u0002\u06c3\u06d9\u0003",
    "\u0002\u0002\u0002\u06c4\u06c5\u0007\u0083\u0002\u0002\u06c5\u06c8\u0007",
    "a\u0002\u0002\u06c6\u06c8\u0007\u00b3\u0002\u0002\u06c7\u06c4\u0003",
    "\u0002\u0002\u0002\u06c7\u06c6\u0003\u0002\u0002\u0002\u06c8\u06ca\u0003",
    "\u0002\u0002\u0002\u06c9\u06cb\u0005\u0138\u009d\u0002\u06ca\u06c9\u0003",
    "\u0002\u0002\u0002\u06ca\u06cb\u0003\u0002\u0002\u0002\u06cb\u06cd\u0003",
    "\u0002\u0002\u0002\u06cc\u06ce\u0005\u009eP\u0002\u06cd\u06cc\u0003",
    "\u0002\u0002\u0002\u06cd\u06ce\u0003\u0002\u0002\u0002\u06ce\u06da\u0003",
    "\u0002\u0002\u0002\u06cf\u06d3\u0007\u0017\u0002\u0002\u06d0\u06d1\u0007",
    "m\u0002\u0002\u06d1\u06d2\u0007I\u0002\u0002\u06d2\u06d4\u0007\u008d",
    "\u0002\u0002\u06d3\u06d0\u0003\u0002\u0002\u0002\u06d3\u06d4\u0003\u0002",
    "\u0002\u0002\u06d4\u06d5\u0003\u0002\u0002\u0002\u06d5\u06d6\u0007\u01ac",
    "\u0002\u0002\u06d6\u06d7\u0005\u00ba^\u0002\u06d7\u06d8\u0007\u01ad",
    "\u0002\u0002\u06d8\u06da\u0003\u0002\u0002\u0002\u06d9\u06c7\u0003\u0002",
    "\u0002\u0002\u06d9\u06cf\u0003\u0002\u0002\u0002\u06da\u009b\u0003\u0002",
    "\u0002\u0002\u06db\u06dc\u0007 \u0002\u0002\u06dc\u06de\u0005\u0146",
    "\u00a4\u0002\u06dd\u06db\u0003\u0002\u0002\u0002\u06dd\u06de\u0003\u0002",
    "\u0002\u0002\u06de\u06fe\u0003\u0002\u0002\u0002\u06df\u06e0\u0007\u0083",
    "\u0002\u0002\u06e0\u06e3\u0007a\u0002\u0002\u06e1\u06e3\u0007\u00b3",
    "\u0002\u0002\u06e2\u06df\u0003\u0002\u0002\u0002\u06e2\u06e1\u0003\u0002",
    "\u0002\u0002\u06e3\u06e5\u0003\u0002\u0002\u0002\u06e4\u06e6\u0005\u0138",
    "\u009d\u0002\u06e5\u06e4\u0003\u0002\u0002\u0002\u06e5\u06e6\u0003\u0002",
    "\u0002\u0002\u06e6\u06e7\u0003\u0002\u0002\u0002\u06e7\u06e8\u0007\u01ac",
    "\u0002\u0002\u06e8\u06ea\u0005\u0132\u009a\u0002\u06e9\u06eb\t\u0007",
    "\u0002\u0002\u06ea\u06e9\u0003\u0002\u0002\u0002\u06ea\u06eb\u0003\u0002",
    "\u0002\u0002\u06eb\u06ec\u0003\u0002\u0002\u0002\u06ec\u06ee\u0007\u01ad",
    "\u0002\u0002\u06ed\u06ef\u0005\u009eP\u0002\u06ee\u06ed\u0003\u0002",
    "\u0002\u0002\u06ee\u06ef\u0003\u0002\u0002\u0002\u06ef\u06f2\u0003\u0002",
    "\u0002\u0002\u06f0\u06f1\u0007s\u0002\u0002\u06f1\u06f3\u0005\u0146",
    "\u00a4\u0002\u06f2\u06f0\u0003\u0002\u0002\u0002\u06f2\u06f3\u0003\u0002",
    "\u0002\u0002\u06f3\u06ff\u0003\u0002\u0002\u0002\u06f4\u06f8\u0007\u0017",
    "\u0002\u0002\u06f5\u06f6\u0007m\u0002\u0002\u06f6\u06f7\u0007I\u0002",
    "\u0002\u06f7\u06f9\u0007\u008d\u0002\u0002\u06f8\u06f5\u0003\u0002\u0002",
    "\u0002\u06f8\u06f9\u0003\u0002\u0002\u0002\u06f9\u06fa\u0003\u0002\u0002",
    "\u0002\u06fa\u06fb\u0007\u01ac\u0002\u0002\u06fb\u06fc\u0005\u00ba^",
    "\u0002\u06fc\u06fd\u0007\u01ad\u0002\u0002\u06fd\u06ff\u0003\u0002\u0002",
    "\u0002\u06fe\u06e2\u0003\u0002\u0002\u0002\u06fe\u06f4\u0003\u0002\u0002",
    "\u0002\u06ff\u009d\u0003\u0002\u0002\u0002\u0700\u0701\u0007\u00c0\u0002",
    "\u0002\u0701\u0702\u0007\u01ac\u0002\u0002\u0702\u0707\u0005\u00a0Q",
    "\u0002\u0703\u0704\u0007\u01ae\u0002\u0002\u0704\u0706\u0005\u00a0Q",
    "\u0002\u0705\u0703\u0003\u0002\u0002\u0002\u0706\u0709\u0003\u0002\u0002",
    "\u0002\u0707\u0705\u0003\u0002\u0002\u0002\u0707\u0708\u0003\u0002\u0002",
    "\u0002\u0708\u070a\u0003\u0002\u0002\u0002\u0709\u0707\u0003\u0002\u0002",
    "\u0002\u070a\u070b\u0007\u01ad\u0002\u0002\u070b\u009f\u0003\u0002\u0002",
    "\u0002\u070c\u070d\u0005\u0148\u00a5\u0002\u070d\u0711\u0007\u019b\u0002",
    "\u0002\u070e\u0712\u0005\u0148\u00a5\u0002\u070f\u0712\u0005\u0136\u009c",
    "\u0002\u0710\u0712\u0007\u0195\u0002\u0002\u0711\u070e\u0003\u0002\u0002",
    "\u0002\u0711\u070f\u0003\u0002\u0002\u0002\u0711\u0710\u0003\u0002\u0002",
    "\u0002\u0712\u00a1\u0003\u0002\u0002\u0002\u0713\u0714\u00071\u0002",
    "\u0002\u0714\u0734\u0005\u0134\u009b\u0002\u0715\u071f\u0007-\u0002",
    "\u0002\u0716\u071d\u0005\u00a4S\u0002\u0717\u0718\u0007I\u0002\u0002",
    "\u0718\u071b\u0007\u00b5\u0002\u0002\u0719\u071a\u0007p\u0002\u0002",
    "\u071a\u071c\u0005\u0132\u009a\u0002\u071b\u0719\u0003\u0002\u0002\u0002",
    "\u071b\u071c\u0003\u0002\u0002\u0002\u071c\u071e\u0003\u0002\u0002\u0002",
    "\u071d\u0717\u0003\u0002\u0002\u0002\u071d\u071e\u0003\u0002\u0002\u0002",
    "\u071e\u0720\u0003\u0002\u0002\u0002\u071f\u0716\u0003\u0002\u0002\u0002",
    "\u071f\u0720\u0003\u0002\u0002\u0002\u0720\u0735\u0003\u0002\u0002\u0002",
    "\u0721\u0723\u0007\u0118\u0002\u0002\u0722\u0721\u0003\u0002\u0002\u0002",
    "\u0722\u0723\u0003\u0002\u0002\u0002\u0723\u0725\u0003\u0002\u0002\u0002",
    "\u0724\u0726\u0007\u0164\u0002\u0002\u0725\u0724\u0003\u0002\u0002\u0002",
    "\u0725\u0726\u0003\u0002\u0002\u0002\u0726\u0727\u0003\u0002\u0002\u0002",
    "\u0727\u0728\u0007-\u0002\u0002\u0728\u0729\u0007I\u0002\u0002\u0729",
    "\u0732\u0005\u001a\u000e\u0002\u072a\u0730\u0007I\u0002\u0002\u072b",
    "\u072c\u0007\u0089\u0002\u0002\u072c\u0731\u0007\u0141\u0002\u0002\u072d",
    "\u0731\u0007\u00b5\u0002\u0002\u072e\u072f\u0007p\u0002\u0002\u072f",
    "\u0731\u0005\u0132\u009a\u0002\u0730\u072b\u0003\u0002\u0002\u0002\u0730",
    "\u072d\u0003\u0002\u0002\u0002\u0730\u072e\u0003\u0002\u0002\u0002\u0731",
    "\u0733\u0003\u0002\u0002\u0002\u0732\u072a\u0003\u0002\u0002\u0002\u0732",
    "\u0733\u0003\u0002\u0002\u0002\u0733\u0735\u0003\u0002\u0002\u0002\u0734",
    "\u0715\u0003\u0002\u0002\u0002\u0734\u0722\u0003\u0002\u0002\u0002\u0735",
    "\u0737\u0003\u0002\u0002\u0002\u0736\u0738\u0007\u01af\u0002\u0002\u0737",
    "\u0736\u0003\u0002\u0002\u0002\u0737\u0738\u0003\u0002\u0002\u0002\u0738",
    "\u00a3\u0003\u0002\u0002\u0002\u0739\u073b\t\u000f\u0002\u0002\u073a",
    "\u0739\u0003\u0002\u0002\u0002\u073a\u073b\u0003\u0002\u0002\u0002\u073b",
    "\u073d\u0003\u0002\u0002\u0002\u073c\u073e\t\u001d\u0002\u0002\u073d",
    "\u073c\u0003\u0002\u0002\u0002\u073d\u073e\u0003\u0002\u0002\u0002\u073e",
    "\u0740\u0003\u0002\u0002\u0002\u073f\u0741\t\u001e\u0002\u0002\u0740",
    "\u073f\u0003\u0002\u0002\u0002\u0740\u0741\u0003\u0002\u0002\u0002\u0741",
    "\u0743\u0003\u0002\u0002\u0002\u0742\u0744\t\u001f\u0002\u0002\u0743",
    "\u0742\u0003\u0002\u0002\u0002\u0743\u0744\u0003\u0002\u0002\u0002\u0744",
    "\u0746\u0003\u0002\u0002\u0002\u0745\u0747\u0007\u0181\u0002\u0002\u0746",
    "\u0745\u0003\u0002\u0002\u0002\u0746\u0747\u0003\u0002\u0002\u0002\u0747",
    "\u0748\u0003\u0002\u0002\u0002\u0748\u0749\u0007I\u0002\u0002\u0749",
    "\u074a\u0005\u001a\u000e\u0002\u074a\u00a5\u0003\u0002\u0002\u0002\u074b",
    "\u0755\u0007E\u0002\u0002\u074c\u0753\u0007\u0135\u0002\u0002\u074d",
    "\u0753\u0007\u014c\u0002\u0002\u074e\u0753\u0007\u0105\u0002\u0002\u074f",
    "\u0753\u0007\u011f\u0002\u0002\u0750\u0751\t \u0002\u0002\u0751\u0753",
    "\u0005\u00acW\u0002\u0752\u074c\u0003\u0002\u0002\u0002\u0752\u074d",
    "\u0003\u0002\u0002\u0002\u0752\u074e\u0003\u0002\u0002\u0002\u0752\u074f",
    "\u0003\u0002\u0002\u0002\u0752\u0750\u0003\u0002\u0002\u0002\u0752\u0753",
    "\u0003\u0002\u0002\u0002\u0753\u0754\u0003\u0002\u0002\u0002\u0754\u0756",
    "\u0007N\u0002\u0002\u0755\u0752\u0003\u0002\u0002\u0002\u0755\u0756",
    "\u0003\u0002\u0002\u0002\u0756\u0758\u0003\u0002\u0002\u0002\u0757\u0759",
    "\u0007\u010c\u0002\u0002\u0758\u0757\u0003\u0002\u0002\u0002\u0758\u0759",
    "\u0003\u0002\u0002\u0002\u0759\u075a\u0003\u0002\u0002\u0002\u075a\u0764",
    "\u0005\u0134\u009b\u0002\u075b\u075c\u0007^\u0002\u0002\u075c\u0761",
    "\u0007\u0194\u0002\u0002\u075d\u075e\u0007\u01ae\u0002\u0002\u075e\u0760",
    "\u0007\u0194\u0002\u0002\u075f\u075d\u0003\u0002\u0002\u0002\u0760\u0763",
    "\u0003\u0002\u0002\u0002\u0761\u075f\u0003\u0002\u0002\u0002\u0761\u0762",
    "\u0003\u0002\u0002\u0002\u0762\u0765\u0003\u0002\u0002\u0002\u0763\u0761",
    "\u0003\u0002\u0002\u0002\u0764\u075b\u0003\u0002\u0002\u0002\u0764\u0765",
    "\u0003\u0002\u0002\u0002\u0765\u0767\u0003\u0002\u0002\u0002\u0766\u0768",
    "\u0007\u01af\u0002\u0002\u0767\u0766\u0003\u0002\u0002\u0002\u0767\u0768",
    "\u0003\u0002\u0002\u0002\u0768\u00a7\u0003\u0002\u0002\u0002\u0769\u076a",
    "\u0007\u00a0\u0002\u0002\u076a\u076e\u0005\u0146\u00a4\u0002\u076b\u076f",
    "\u0005\u0146\u00a4\u0002\u076c\u076f\u0005\u00aaV\u0002\u076d\u076f",
    "\u0005\u0136\u009c\u0002\u076e\u076b\u0003\u0002\u0002\u0002\u076e\u076c",
    "\u0003\u0002\u0002\u0002\u076e\u076d\u0003\u0002\u0002\u0002\u076f\u0771",
    "\u0003\u0002\u0002\u0002\u0770\u0772\u0007\u01af\u0002\u0002\u0771\u0770",
    "\u0003\u0002\u0002\u0002\u0771\u0772\u0003\u0002\u0002\u0002\u0772\u0795",
    "\u0003\u0002\u0002\u0002\u0773\u0774\u0007\u00a0\u0002\u0002\u0774\u0775",
    "\u0007\u00ad\u0002\u0002\u0775\u0776\u0007\u011a\u0002\u0002\u0776\u077f",
    "\u0007\u0120\u0002\u0002\u0777\u0778\u0007\u0089\u0002\u0002\u0778\u0780",
    "\u0007\u0183\u0002\u0002\u0779\u077a\u0007\u0089\u0002\u0002\u077a\u0780",
    "\u0007\u00df\u0002\u0002\u077b\u077c\u0007\u015a\u0002\u0002\u077c\u0780",
    "\u0007\u0089\u0002\u0002\u077d\u0780\u0007\u016d\u0002\u0002\u077e\u0780",
    "\u0007\u0168\u0002\u0002\u077f\u0777\u0003\u0002\u0002\u0002\u077f\u0779",
    "\u0003\u0002\u0002\u0002\u077f\u077b\u0003\u0002\u0002\u0002\u077f\u077d",
    "\u0003\u0002\u0002\u0002\u077f\u077e\u0003\u0002\u0002\u0002\u0780\u0782",
    "\u0003\u0002\u0002\u0002\u0781\u0783\u0007\u01af\u0002\u0002\u0782\u0781",
    "\u0003\u0002\u0002\u0002\u0782\u0783\u0003\u0002\u0002\u0002\u0783\u0795",
    "\u0003\u0002\u0002\u0002\u0784\u0785\u0007\u00a0\u0002\u0002\u0785\u0786",
    "\u0007W\u0002\u0002\u0786\u0787\u0005\u0128\u0095\u0002\u0787\u0789",
    "\u0005\u0136\u009c\u0002\u0788\u078a\u0007\u01af\u0002\u0002\u0789\u0788",
    "\u0003\u0002\u0002\u0002\u0789\u078a\u0003\u0002\u0002\u0002\u078a\u0795",
    "\u0003\u0002\u0002\u0002\u078b\u078c\u0007\u00a0\u0002\u0002\u078c\u078d",
    "\u0007\u00c7\u0002\u0002\u078d\u0795\u0005\u0136\u009c\u0002\u078e\u078f",
    "\u0007\u00a0\u0002\u0002\u078f\u0790\u0007\u014e\u0002\u0002\u0790\u0795",
    "\u0005\u0136\u009c\u0002\u0791\u0792\u0007\u00a0\u0002\u0002\u0792\u0793",
    "\u0007\u00c9\u0002\u0002\u0793\u0795\u0005\u0136\u009c\u0002\u0794\u0769",
    "\u0003\u0002\u0002\u0002\u0794\u0773\u0003\u0002\u0002\u0002\u0794\u0784",
    "\u0003\u0002\u0002\u0002\u0794\u078b\u0003\u0002\u0002\u0002\u0794\u078e",
    "\u0003\u0002\u0002\u0002\u0794\u0791\u0003\u0002\u0002\u0002\u0795\u00a9",
    "\u0003\u0002\u0002\u0002\u0796\u0799\u0005\u0142\u00a2\u0002\u0797\u0799",
    "\u0007\u0194\u0002\u0002\u0798\u0796\u0003\u0002\u0002\u0002\u0798\u0797",
    "\u0003\u0002\u0002\u0002\u0799\u00ab\u0003\u0002\u0002\u0002\u079a\u079b",
    "\bW\u0001\u0002\u079b\u07c8\u00072\u0002\u0002\u079c\u07c8\u0007n\u0002",
    "\u0002\u079d\u07c8\u0007\u0194\u0002\u0002\u079e\u07c8\u0005\u0142\u00a2",
    "\u0002\u079f\u07c8\u0005\u00eex\u0002\u07a0\u07a1\u0007\u0014\u0002",
    "\u0002\u07a1\u07a3\u0005\u00acW\u0002\u07a2\u07a4\u0005\u00f0y\u0002",
    "\u07a3\u07a2\u0003\u0002\u0002\u0002\u07a4\u07a5\u0003\u0002\u0002\u0002",
    "\u07a5\u07a3\u0003\u0002\u0002\u0002\u07a5\u07a6\u0003\u0002\u0002\u0002",
    "\u07a6\u07a9\u0003\u0002\u0002\u0002\u07a7\u07a8\u0007<\u0002\u0002",
    "\u07a8\u07aa\u0005\u00acW\u0002\u07a9\u07a7\u0003\u0002\u0002\u0002",
    "\u07a9\u07aa\u0003\u0002\u0002\u0002\u07aa\u07ab\u0003\u0002\u0002\u0002",
    "\u07ab\u07ac\u0007=\u0002\u0002\u07ac\u07c8\u0003\u0002\u0002\u0002",
    "\u07ad\u07af\u0007\u0014\u0002\u0002\u07ae\u07b0\u0005\u00f2z\u0002",
    "\u07af\u07ae\u0003\u0002\u0002\u0002\u07b0\u07b1\u0003\u0002\u0002\u0002",
    "\u07b1\u07af\u0003\u0002\u0002\u0002\u07b1\u07b2\u0003\u0002\u0002\u0002",
    "\u07b2\u07b5\u0003\u0002\u0002\u0002\u07b3\u07b4\u0007<\u0002\u0002",
    "\u07b4\u07b6\u0005\u00acW\u0002\u07b5\u07b3\u0003\u0002\u0002\u0002",
    "\u07b5\u07b6\u0003\u0002\u0002\u0002\u07b6\u07b7\u0003\u0002\u0002\u0002",
    "\u07b7\u07b8\u0007=\u0002\u0002\u07b8\u07c8\u0003\u0002\u0002\u0002",
    "\u07b9\u07c8\u0005\u0130\u0099\u0002\u07ba\u07bb\u0007\u01ac\u0002\u0002",
    "\u07bb\u07bc\u0005\u00acW\u0002\u07bc\u07bd\u0007\u01ad\u0002\u0002",
    "\u07bd\u07c8\u0003\u0002\u0002\u0002\u07be\u07bf\u0007\u01ac\u0002\u0002",
    "\u07bf\u07c0\u0005\u00b0Y\u0002\u07c0\u07c1\u0007\u01ad\u0002\u0002",
    "\u07c1\u07c8\u0003\u0002\u0002\u0002\u07c2\u07c3\u0007\u01b6\u0002\u0002",
    "\u07c3\u07c8\u0005\u00acW\b\u07c4\u07c5\t!\u0002\u0002\u07c5\u07c8\u0005",
    "\u00acW\u0006\u07c6\u07c8\u0005\u0110\u0089\u0002\u07c7\u079a\u0003",
    "\u0002\u0002\u0002\u07c7\u079c\u0003\u0002\u0002\u0002\u07c7\u079d\u0003",
    "\u0002\u0002\u0002\u07c7\u079e\u0003\u0002\u0002\u0002\u07c7\u079f\u0003",
    "\u0002\u0002\u0002\u07c7\u07a0\u0003\u0002\u0002\u0002\u07c7\u07ad\u0003",
    "\u0002\u0002\u0002\u07c7\u07b9\u0003\u0002\u0002\u0002\u07c7\u07ba\u0003",
    "\u0002\u0002\u0002\u07c7\u07be\u0003\u0002\u0002\u0002\u07c7\u07c2\u0003",
    "\u0002\u0002\u0002\u07c7\u07c4\u0003\u0002\u0002\u0002\u07c7\u07c6\u0003",
    "\u0002\u0002\u0002\u07c8\u07d8\u0003\u0002\u0002\u0002\u07c9\u07ca\f",
    "\u0007\u0002\u0002\u07ca\u07cb\t\"\u0002\u0002\u07cb\u07d7\u0005\u00ac",
    "W\b\u07cc\u07cd\f\u0005\u0002\u0002\u07cd\u07ce\t#\u0002\u0002\u07ce",
    "\u07d7\u0005\u00acW\u0006\u07cf\u07d0\f\u0004\u0002\u0002\u07d0\u07d1",
    "\u0005\u014a\u00a6\u0002\u07d1\u07d2\u0005\u00acW\u0005\u07d2\u07d7",
    "\u0003\u0002\u0002\u0002\u07d3\u07d4\f\u000e\u0002\u0002\u07d4\u07d5",
    "\u0007\u001c\u0002\u0002\u07d5\u07d7\u0005\u0146\u00a4\u0002\u07d6\u07c9",
    "\u0003\u0002\u0002\u0002\u07d6\u07cc\u0003\u0002\u0002\u0002\u07d6\u07cf",
    "\u0003\u0002\u0002\u0002\u07d6\u07d3\u0003\u0002\u0002\u0002\u07d7\u07da",
    "\u0003\u0002\u0002\u0002\u07d8\u07d6\u0003\u0002\u0002\u0002\u07d8\u07d9",
    "\u0003\u0002\u0002\u0002\u07d9\u00ad\u0003\u0002\u0002\u0002\u07da\u07d8",
    "\u0003\u0002\u0002\u0002\u07db\u07e4\u0007n\u0002\u0002\u07dc\u07e4",
    "\u0005\u0142\u00a2\u0002\u07dd\u07e4\u0005\u00eex\u0002\u07de\u07e4",
    "\u0007\u0194\u0002\u0002\u07df\u07e0\u0007\u01ac\u0002\u0002\u07e0\u07e1",
    "\u0005\u00aeX\u0002\u07e1\u07e2\u0007\u01ad\u0002\u0002\u07e2\u07e4",
    "\u0003\u0002\u0002\u0002\u07e3\u07db\u0003\u0002\u0002\u0002\u07e3\u07dc",
    "\u0003\u0002\u0002\u0002\u07e3\u07dd\u0003\u0002\u0002\u0002\u07e3\u07de",
    "\u0003\u0002\u0002\u0002\u07e3\u07df\u0003\u0002\u0002\u0002\u07e4\u00af",
    "\u0003\u0002\u0002\u0002\u07e5\u07e6\u0005\u001a\u000e\u0002\u07e6\u00b1",
    "\u0003\u0002\u0002\u0002\u07e7\u07ea\u0007\u00c0\u0002\u0002\u07e8\u07e9",
    "\u0007\u018d\u0002\u0002\u07e9\u07eb\u0007\u01ae\u0002\u0002\u07ea\u07e8",
    "\u0003\u0002\u0002\u0002\u07ea\u07eb\u0003\u0002\u0002\u0002\u07eb\u07ec",
    "\u0003\u0002\u0002\u0002\u07ec\u07f1\u0005\u00b4[\u0002\u07ed\u07ee",
    "\u0007\u01ae\u0002\u0002\u07ee\u07f0\u0005\u00b4[\u0002\u07ef\u07ed",
    "\u0003\u0002\u0002\u0002\u07f0\u07f3\u0003\u0002\u0002\u0002\u07f1\u07ef",
    "\u0003\u0002\u0002\u0002\u07f1\u07f2\u0003\u0002\u0002\u0002\u07f2\u00b3",
    "\u0003\u0002\u0002\u0002\u07f3\u07f1\u0003\u0002\u0002\u0002\u07f4\u07f9",
    "\u0005\u0146\u00a4\u0002\u07f5\u07f6\u0007\u01ac\u0002\u0002\u07f6\u07f7",
    "\u0005\u0132\u009a\u0002\u07f7\u07f8\u0007\u01ad\u0002\u0002\u07f8\u07fa",
    "\u0003\u0002\u0002\u0002\u07f9\u07f5\u0003\u0002\u0002\u0002\u07f9\u07fa",
    "\u0003\u0002\u0002\u0002\u07fa\u07fb\u0003\u0002\u0002\u0002\u07fb\u07fc",
    "\u0007\t\u0002\u0002\u07fc\u07fd\u0007\u01ac\u0002\u0002\u07fd\u07fe",
    "\u0005\u001a\u000e\u0002\u07fe\u07ff\u0007\u01ad\u0002\u0002\u07ff\u00b5",
    "\u0003\u0002\u0002\u0002\u0800\u0803\u0005\u0130\u0099\u0002\u0801\u0803",
    "\u0007\u0194\u0002\u0002\u0802\u0800\u0003\u0002\u0002\u0002\u0802\u0801",
    "\u0003\u0002\u0002\u0002\u0803\u0806\u0003\u0002\u0002\u0002\u0804\u0807",
    "\u0007\u019b\u0002\u0002\u0805\u0807\u0005\u014c\u00a7\u0002\u0806\u0804",
    "\u0003\u0002\u0002\u0002\u0806\u0805\u0003\u0002\u0002\u0002\u0807\u0808",
    "\u0003\u0002\u0002\u0002\u0808\u0811\u0005\u00acW\u0002\u0809\u080a",
    "\u0005\u0146\u00a4\u0002\u080a\u080b\u0007\u01a7\u0002\u0002\u080b\u080c",
    "\u0005\u0146\u00a4\u0002\u080c\u080d\u0007\u01ac\u0002\u0002\u080d\u080e",
    "\u0005\u0108\u0085\u0002\u080e\u080f\u0007\u01ad\u0002\u0002\u080f\u0811",
    "\u0003\u0002\u0002\u0002\u0810\u0802\u0003\u0002\u0002\u0002\u0810\u0809",
    "\u0003\u0002\u0002\u0002\u0811\u00b7\u0003\u0002\u0002\u0002\u0812\u0817",
    "\u0005\u00ba^\u0002\u0813\u0814\u0007\u01ae\u0002\u0002\u0814\u0816",
    "\u0005\u00ba^\u0002\u0815\u0813\u0003\u0002\u0002\u0002\u0816\u0819",
    "\u0003\u0002\u0002\u0002\u0817\u0815\u0003\u0002\u0002\u0002\u0817\u0818",
    "\u0003\u0002\u0002\u0002\u0818\u00b9\u0003\u0002\u0002\u0002\u0819\u0817",
    "\u0003\u0002\u0002\u0002\u081a\u081b\b^\u0001\u0002\u081b\u081c\u0005",
    "\u00bc_\u0002\u081c\u0825\u0003\u0002\u0002\u0002\u081d\u081e\f\u0005",
    "\u0002\u0002\u081e\u081f\u0007\u0007\u0002\u0002\u081f\u0824\u0005\u00ba",
    "^\u0006\u0820\u0821\f\u0004\u0002\u0002\u0821\u0822\u0007z\u0002\u0002",
    "\u0822\u0824\u0005\u00ba^\u0005\u0823\u081d\u0003\u0002\u0002\u0002",
    "\u0823\u0820\u0003\u0002\u0002\u0002\u0824\u0827\u0003\u0002\u0002\u0002",
    "\u0825\u0823\u0003\u0002\u0002\u0002\u0825\u0826\u0003\u0002\u0002\u0002",
    "\u0826\u00bb\u0003\u0002\u0002\u0002\u0827\u0825\u0003\u0002\u0002\u0002",
    "\u0828\u0829\u0007m\u0002\u0002\u0829\u0863\u0005\u00bc_\u0002\u082a",
    "\u082b\u0007B\u0002\u0002\u082b\u082c\u0007\u01ac\u0002\u0002\u082c",
    "\u082d\u0005\u00b0Y\u0002\u082d\u082e\u0007\u01ad\u0002\u0002\u082e",
    "\u0863\u0003\u0002\u0002\u0002\u082f\u0830\u0005\u00acW\u0002\u0830",
    "\u0831\u0005\u014a\u00a6\u0002\u0831\u0832\u0005\u00acW\u0002\u0832",
    "\u0863\u0003\u0002\u0002\u0002\u0833\u0834\u0005\u00acW\u0002\u0834",
    "\u0835\u0005\u014a\u00a6\u0002\u0835\u0836\t$\u0002\u0002\u0836\u0837",
    "\u0007\u01ac\u0002\u0002\u0837\u0838\u0005\u00b0Y\u0002\u0838\u0839",
    "\u0007\u01ad\u0002\u0002\u0839\u0863\u0003\u0002\u0002\u0002\u083a\u083c",
    "\u0005\u00acW\u0002\u083b\u083d\u0007m\u0002\u0002\u083c\u083b\u0003",
    "\u0002\u0002\u0002\u083c\u083d\u0003\u0002\u0002\u0002\u083d\u083e\u0003",
    "\u0002\u0002\u0002\u083e\u083f\u0007\u000e\u0002\u0002\u083f\u0840\u0005",
    "\u00acW\u0002\u0840\u0841\u0007\u0007\u0002\u0002\u0841\u0842\u0005",
    "\u00acW\u0002\u0842\u0863\u0003\u0002\u0002\u0002\u0843\u0845\u0005",
    "\u00acW\u0002\u0844\u0846\u0007m\u0002\u0002\u0845\u0844\u0003\u0002",
    "\u0002\u0002\u0845\u0846\u0003\u0002\u0002\u0002\u0846\u0847\u0003\u0002",
    "\u0002\u0002\u0847\u0848\u0007Y\u0002\u0002\u0848\u084b\u0007\u01ac",
    "\u0002\u0002\u0849\u084c\u0005\u00b0Y\u0002\u084a\u084c\u0005\u0108",
    "\u0085\u0002\u084b\u0849\u0003\u0002\u0002\u0002\u084b\u084a\u0003\u0002",
    "\u0002\u0002\u084c\u084d\u0003\u0002\u0002\u0002\u084d\u084e\u0007\u01ad",
    "\u0002\u0002\u084e\u0863\u0003\u0002\u0002\u0002\u084f\u0851\u0005\u00ac",
    "W\u0002\u0850\u0852\u0007m\u0002\u0002\u0851\u0850\u0003\u0002\u0002",
    "\u0002\u0851\u0852\u0003\u0002\u0002\u0002\u0852\u0853\u0003\u0002\u0002",
    "\u0002\u0853\u0854\u0007d\u0002\u0002\u0854\u0857\u0005\u00acW\u0002",
    "\u0855\u0856\u0007?\u0002\u0002\u0856\u0858\u0005\u00acW\u0002\u0857",
    "\u0855\u0003\u0002\u0002\u0002\u0857\u0858\u0003\u0002\u0002\u0002\u0858",
    "\u0863\u0003\u0002\u0002\u0002\u0859\u085a\u0005\u00acW\u0002\u085a",
    "\u085b\u0007_\u0002\u0002\u085b\u085c\u0005\u013a\u009e\u0002\u085c",
    "\u0863\u0003\u0002\u0002\u0002\u085d\u085e\u0007\u01ac\u0002\u0002\u085e",
    "\u085f\u0005\u00ba^\u0002\u085f\u0860\u0007\u01ad\u0002\u0002\u0860",
    "\u0863\u0003\u0002\u0002\u0002\u0861\u0863\u0007\u0195\u0002\u0002\u0862",
    "\u0828\u0003\u0002\u0002\u0002\u0862\u082a\u0003\u0002\u0002\u0002\u0862",
    "\u082f\u0003\u0002\u0002\u0002\u0862\u0833\u0003\u0002\u0002\u0002\u0862",
    "\u083a\u0003\u0002\u0002\u0002\u0862\u0843\u0003\u0002\u0002\u0002\u0862",
    "\u084f\u0003\u0002\u0002\u0002\u0862\u0859\u0003\u0002\u0002\u0002\u0862",
    "\u085d\u0003\u0002\u0002\u0002\u0862\u0861\u0003\u0002\u0002\u0002\u0863",
    "\u00bd\u0003\u0002\u0002\u0002\u0864\u086a\u0005\u00c2b\u0002\u0865",
    "\u0866\u0007\u01ac\u0002\u0002\u0866\u0867\u0005\u00be`\u0002\u0867",
    "\u0868\u0007\u01ad\u0002\u0002\u0868\u086a\u0003\u0002\u0002\u0002\u0869",
    "\u0864\u0003\u0002\u0002\u0002\u0869\u0865\u0003\u0002\u0002\u0002\u086a",
    "\u086e\u0003\u0002\u0002\u0002\u086b\u086d\u0005\u00c0a\u0002\u086c",
    "\u086b\u0003\u0002\u0002\u0002\u086d\u0870\u0003\u0002\u0002\u0002\u086e",
    "\u086c\u0003\u0002\u0002\u0002\u086e\u086f\u0003\u0002\u0002\u0002\u086f",
    "\u00bf\u0003\u0002\u0002\u0002\u0870\u086e\u0003\u0002\u0002\u0002\u0871",
    "\u0873\u0007\u00b2\u0002\u0002\u0872\u0874\u0007\u0005\u0002\u0002\u0873",
    "\u0872\u0003\u0002\u0002\u0002\u0873\u0874\u0003\u0002\u0002\u0002\u0874",
    "\u0878\u0003\u0002\u0002\u0002\u0875\u0878\u0007@\u0002\u0002\u0876",
    "\u0878\u0007]\u0002\u0002\u0877\u0871\u0003\u0002\u0002\u0002\u0877",
    "\u0875\u0003\u0002\u0002\u0002\u0877\u0876\u0003\u0002\u0002\u0002\u0878",
    "\u0882\u0003\u0002\u0002\u0002\u0879\u0883\u0005\u00c2b\u0002\u087a",
    "\u087b\u0007\u01ac\u0002\u0002\u087b\u087c\u0005\u00be`\u0002\u087c",
    "\u087d\u0007\u01ad\u0002\u0002\u087d\u087f\u0003\u0002\u0002\u0002\u087e",
    "\u087a\u0003\u0002\u0002\u0002\u087f\u0880\u0003\u0002\u0002\u0002\u0880",
    "\u087e\u0003\u0002\u0002\u0002\u0880\u0881\u0003\u0002\u0002\u0002\u0881",
    "\u0883\u0003\u0002\u0002\u0002\u0882\u0879\u0003\u0002\u0002\u0002\u0882",
    "\u087e\u0003\u0002\u0002\u0002\u0883\u00c1\u0003\u0002\u0002\u0002\u0884",
    "\u0886\u0007\u009b\u0002\u0002\u0885\u0887\t%\u0002\u0002\u0886\u0885",
    "\u0003\u0002\u0002\u0002\u0886\u0887\u0003\u0002\u0002\u0002\u0887\u0889",
    "\u0003\u0002\u0002\u0002\u0888\u088a\u0005\u00c4c\u0002\u0889\u0888",
    "\u0003\u0002\u0002\u0002\u0889\u088a\u0003\u0002\u0002\u0002\u088a\u088b",
    "\u0003\u0002\u0002\u0002\u088b\u088e\u0005\u00d6l\u0002\u088c\u088d",
    "\u0007^\u0002\u0002\u088d\u088f\u0005\u0128\u0095\u0002\u088e\u088c",
    "\u0003\u0002\u0002\u0002\u088e\u088f\u0003\u0002\u0002\u0002\u088f\u0892",
    "\u0003\u0002\u0002\u0002\u0890\u0891\u0007N\u0002\u0002\u0891\u0893",
    "\u0005\u00dan\u0002\u0892\u0890\u0003\u0002\u0002\u0002\u0892\u0893",
    "\u0003\u0002\u0002\u0002\u0893\u0896\u0003\u0002\u0002\u0002\u0894\u0895",
    "\u0007\u00be\u0002\u0002\u0895\u0897\u0005\u00ba^\u0002\u0896\u0894",
    "\u0003\u0002\u0002\u0002\u0896\u0897\u0003\u0002\u0002\u0002\u0897\u08a2",
    "\u0003\u0002\u0002\u0002\u0898\u0899\u0007S\u0002\u0002\u0899\u089a",
    "\u0007\u0012\u0002\u0002\u089a\u089f\u0005\u00ceh\u0002\u089b\u089c",
    "\u0007\u01ae\u0002\u0002\u089c\u089e\u0005\u00ceh\u0002\u089d\u089b",
    "\u0003\u0002\u0002\u0002\u089e\u08a1\u0003\u0002\u0002\u0002\u089f\u089d",
    "\u0003\u0002\u0002\u0002\u089f\u08a0\u0003\u0002\u0002\u0002\u08a0\u08a3",
    "\u0003\u0002\u0002\u0002\u08a1\u089f\u0003\u0002\u0002\u0002\u08a2\u0898",
    "\u0003\u0002\u0002\u0002\u08a2\u08a3\u0003\u0002\u0002\u0002\u08a3\u08a6",
    "\u0003\u0002\u0002\u0002\u08a4\u08a5\u0007T\u0002\u0002\u08a5\u08a7",
    "\u0005\u00ba^\u0002\u08a6\u08a4\u0003\u0002\u0002\u0002\u08a6\u08a7",
    "\u0003\u0002\u0002\u0002\u08a7\u00c3\u0003\u0002\u0002\u0002\u08a8\u08a9",
    "\u0007\u00ab\u0002\u0002\u08a9\u08ab\u0005\u00acW\u0002\u08aa\u08ac",
    "\u0007\u007f\u0002\u0002\u08ab\u08aa\u0003\u0002\u0002\u0002\u08ab\u08ac",
    "\u0003\u0002\u0002\u0002\u08ac\u08af\u0003\u0002\u0002\u0002\u08ad\u08ae",
    "\u0007\u00c0\u0002\u0002\u08ae\u08b0\u0007\u0179\u0002\u0002\u08af\u08ad",
    "\u0003\u0002\u0002\u0002\u08af\u08b0\u0003\u0002\u0002\u0002\u08b0\u00c5",
    "\u0003\u0002\u0002\u0002\u08b1\u08b2\u0007{\u0002\u0002\u08b2\u08b3",
    "\u0007\u0012\u0002\u0002\u08b3\u08b8\u0005\u00ccg\u0002\u08b4\u08b5",
    "\u0007\u01ae\u0002\u0002\u08b5\u08b7\u0005\u00ccg\u0002\u08b6\u08b4",
    "\u0003\u0002\u0002\u0002\u08b7\u08ba\u0003\u0002\u0002\u0002\u08b8\u08b6",
    "\u0003\u0002\u0002\u0002\u08b8\u08b9\u0003\u0002\u0002\u0002\u08b9\u08c6",
    "\u0003\u0002\u0002\u0002\u08ba\u08b8\u0003\u0002\u0002\u0002\u08bb\u08bc",
    "\u0007\u013f\u0002\u0002\u08bc\u08bd\u0005\u00acW\u0002\u08bd\u08c4",
    "\t&\u0002\u0002\u08be\u08bf\u0007E\u0002\u0002\u08bf\u08c0\t\'\u0002",
    "\u0002\u08c0\u08c1\u0005\u00acW\u0002\u08c1\u08c2\t&\u0002\u0002\u08c2",
    "\u08c3\u0007\u0141\u0002\u0002\u08c3\u08c5\u0003\u0002\u0002\u0002\u08c4",
    "\u08be\u0003\u0002\u0002\u0002\u08c4\u08c5\u0003\u0002\u0002\u0002\u08c5",
    "\u08c7\u0003\u0002\u0002\u0002\u08c6\u08bb\u0003\u0002\u0002\u0002\u08c6",
    "\u08c7\u0003\u0002\u0002\u0002\u08c7\u00c7\u0003\u0002\u0002\u0002\u08c8",
    "\u08c9\u0007I\u0002\u0002\u08c9\u08dc\u0007\u0010\u0002\u0002\u08ca",
    "\u08cb\u0007I\u0002\u0002\u08cb\u08cc\u0007\u018c\u0002\u0002\u08cc",
    "\u08ce\u0007\u00cd\u0002\u0002\u08cd\u08cf\u0005\u00caf\u0002\u08ce",
    "\u08cd\u0003\u0002\u0002\u0002\u08ce\u08cf\u0003\u0002\u0002\u0002\u08cf",
    "\u08dc\u0003\u0002\u0002\u0002\u08d0\u08d1\u0007I\u0002\u0002\u08d1",
    "\u08d2\u0007\u018c\u0002\u0002\u08d2\u08d6\u0007\u014a\u0002\u0002\u08d3",
    "\u08d4\u0007\u01ac\u0002\u0002\u08d4\u08d5\u0007\u0197\u0002\u0002\u08d5",
    "\u08d7\u0007\u01ad\u0002\u0002\u08d6\u08d3\u0003\u0002\u0002\u0002\u08d6",
    "\u08d7\u0003\u0002\u0002\u0002\u08d7\u08d9\u0003\u0002\u0002\u0002\u08d8",
    "\u08da\u0005\u00caf\u0002\u08d9\u08d8\u0003\u0002\u0002\u0002\u08d9",
    "\u08da\u0003\u0002\u0002\u0002\u08da\u08dc\u0003\u0002\u0002\u0002\u08db",
    "\u08c8\u0003\u0002\u0002\u0002\u08db\u08ca\u0003\u0002\u0002\u0002\u08db",
    "\u08d0\u0003\u0002\u0002\u0002\u08dc\u00c9\u0003\u0002\u0002\u0002\u08dd",
    "\u08e2\u0007\u01ae\u0002\u0002\u08de\u08df\u0007\u0198\u0002\u0002\u08df",
    "\u08e3\u0007\u00d5\u0002\u0002\u08e0\u08e3\u0007\u0180\u0002\u0002\u08e1",
    "\u08e3\u0007\u015d\u0002\u0002\u08e2\u08de\u0003\u0002\u0002\u0002\u08e2",
    "\u08e0\u0003\u0002\u0002\u0002\u08e2\u08e1\u0003\u0002\u0002\u0002\u08e3",
    "\u00cb\u0003\u0002\u0002\u0002\u08e4\u08e6\u0005\u00acW\u0002\u08e5",
    "\u08e7\t\u0007\u0002\u0002\u08e6\u08e5\u0003\u0002\u0002\u0002\u08e6",
    "\u08e7\u0003\u0002\u0002\u0002\u08e7\u00cd\u0003\u0002\u0002\u0002\u08e8",
    "\u08e9\u0005\u00acW\u0002\u08e9\u00cf\u0003\u0002\u0002\u0002\u08ea",
    "\u08eb\u0007y\u0002\u0002\u08eb\u08ec\u0007\u01ac\u0002\u0002\u08ec",
    "\u08f1\u0005\u00d2j\u0002\u08ed\u08ee\u0007\u01ae\u0002\u0002\u08ee",
    "\u08f0\u0005\u00d2j\u0002\u08ef\u08ed\u0003\u0002\u0002\u0002\u08f0",
    "\u08f3\u0003\u0002\u0002\u0002\u08f1\u08ef\u0003\u0002\u0002\u0002\u08f1",
    "\u08f2\u0003\u0002\u0002\u0002\u08f2\u08f4\u0003\u0002\u0002\u0002\u08f3",
    "\u08f1\u0003\u0002\u0002\u0002\u08f4\u08f5\u0007\u01ad\u0002\u0002\u08f5",
    "\u00d1\u0003\u0002\u0002\u0002\u08f6\u08f7\u0007\u0100\u0002\u0002\u08f7",
    "\u0924\u0007\u0195\u0002\u0002\u08f8\u08f9\t(\u0002\u0002\u08f9\u0924",
    "\u0007S\u0002\u0002\u08fa\u08fb\t)\u0002\u0002\u08fb\u0924\u0007\u00b2",
    "\u0002\u0002\u08fc\u08fd\t*\u0002\u0002\u08fd\u0924\u0007`\u0002\u0002",
    "\u08fe\u08ff\u0007\u00ff\u0002\u0002\u08ff\u0924\u0007\u0189\u0002\u0002",
    "\u0900\u0901\u0007\u0107\u0002\u0002\u0901\u0924\u0007{\u0002\u0002",
    "\u0902\u0924\u0007\u0114\u0002\u0002\u0903\u0904\u0007\u011c\u0002\u0002",
    "\u0904\u0924\u0007\u0081\u0002\u0002\u0905\u0906\u0007\u011d\u0002\u0002",
    "\u0906\u0924\u0007\u0081\u0002\u0002\u0907\u0908\u0007\u0127\u0002\u0002",
    "\u0908\u0924\u0007\u0195\u0002\u0002\u0909\u090a\u0007\u0128\u0002\u0002",
    "\u090a\u0924\u0007\u0195\u0002\u0002\u090b\u090c\u0007\u0143\u0002\u0002",
    "\u090c\u090d\u0007I\u0002\u0002\u090d\u090e\u0007\u01ac\u0002\u0002",
    "\u090e\u0913\u0005\u00d4k\u0002\u090f\u0910\u0007\u01ae\u0002\u0002",
    "\u0910\u0912\u0005\u00d4k\u0002\u0911\u090f\u0003\u0002\u0002\u0002",
    "\u0912\u0915\u0003\u0002\u0002\u0002\u0913\u0911\u0003\u0002\u0002\u0002",
    "\u0913\u0914\u0003\u0002\u0002\u0002\u0914\u0916\u0003\u0002\u0002\u0002",
    "\u0915\u0913\u0003\u0002\u0002\u0002\u0916\u0917\u0007\u01ad\u0002\u0002",
    "\u0917\u0924\u0003\u0002\u0002\u0002\u0918\u0919\u0007\u0143\u0002\u0002",
    "\u0919\u091a\u0007I\u0002\u0002\u091a\u0924\u0007\u0184\u0002\u0002",
    "\u091b\u091c\u0007\u0148\u0002\u0002\u091c\u0924\t\u0014\u0002\u0002",
    "\u091d\u0924\u0007\u0155\u0002\u0002\u091e\u091f\u0007\u015c\u0002\u0002",
    "\u091f\u0924\u0007\u0081\u0002\u0002\u0920\u0921\u0007\u00b7\u0002\u0002",
    "\u0921\u0922\u0007\u0081\u0002\u0002\u0922\u0924\u0007\u0197\u0002\u0002",
    "\u0923\u08f6\u0003\u0002\u0002\u0002\u0923\u08f8\u0003\u0002\u0002\u0002",
    "\u0923\u08fa\u0003\u0002\u0002\u0002\u0923\u08fc\u0003\u0002\u0002\u0002",
    "\u0923\u08fe\u0003\u0002\u0002\u0002\u0923\u0900\u0003\u0002\u0002\u0002",
    "\u0923\u0902\u0003\u0002\u0002\u0002\u0923\u0903\u0003\u0002\u0002\u0002",
    "\u0923\u0905\u0003\u0002\u0002\u0002\u0923\u0907\u0003\u0002\u0002\u0002",
    "\u0923\u0909\u0003\u0002\u0002\u0002\u0923\u090b\u0003\u0002\u0002\u0002",
    "\u0923\u0918\u0003\u0002\u0002\u0002\u0923\u091b\u0003\u0002\u0002\u0002",
    "\u0923\u091d\u0003\u0002\u0002\u0002\u0923\u091e\u0003\u0002\u0002\u0002",
    "\u0923\u0920\u0003\u0002\u0002\u0002\u0924\u00d3\u0003\u0002\u0002\u0002",
    "\u0925\u0929\u0007\u0194\u0002\u0002\u0926\u092a\u0007\u0184\u0002\u0002",
    "\u0927\u0928\u0007\u019b\u0002\u0002\u0928\u092a\u0005\u0142\u00a2\u0002",
    "\u0929\u0926\u0003\u0002\u0002\u0002\u0929\u0927\u0003\u0002\u0002\u0002",
    "\u092a\u00d5\u0003\u0002\u0002\u0002\u092b\u0930\u0005\u00d8m\u0002",
    "\u092c\u092d\u0007\u01ae\u0002\u0002\u092d\u092f\u0005\u00d8m\u0002",
    "\u092e\u092c\u0003\u0002\u0002\u0002\u092f\u0932\u0003\u0002\u0002\u0002",
    "\u0930\u092e\u0003\u0002\u0002\u0002\u0930\u0931\u0003\u0002\u0002\u0002",
    "\u0931\u00d7\u0003\u0002\u0002\u0002\u0932\u0930\u0003\u0002\u0002\u0002",
    "\u0933\u0934\u0005\u0128\u0095\u0002\u0934\u0935\u0007\u01a7\u0002\u0002",
    "\u0935\u0937\u0003\u0002\u0002\u0002\u0936\u0933\u0003\u0002\u0002\u0002",
    "\u0936\u0937\u0003\u0002\u0002\u0002\u0937\u093b\u0003\u0002\u0002\u0002",
    "\u0938\u093c\u0005\u0104\u0083\u0002\u0939\u093a\u0007\u01ab\u0002\u0002",
    "\u093a\u093c\t+\u0002\u0002\u093b\u0938\u0003\u0002\u0002\u0002\u093b",
    "\u0939\u0003\u0002\u0002\u0002\u093c\u0949\u0003\u0002\u0002\u0002\u093d",
    "\u093e\u0005\u0102\u0082\u0002\u093e\u093f\u0007\u019b\u0002\u0002\u093f",
    "\u0940\u0005\u00acW\u0002\u0940\u0949\u0003\u0002\u0002\u0002\u0941",
    "\u0946\u0005\u00acW\u0002\u0942\u0944\u0007\t\u0002\u0002\u0943\u0942",
    "\u0003\u0002\u0002\u0002\u0943\u0944\u0003\u0002\u0002\u0002\u0944\u0945",
    "\u0003\u0002\u0002\u0002\u0945\u0947\u0005\u0102\u0082\u0002\u0946\u0943",
    "\u0003\u0002\u0002\u0002\u0946\u0947\u0003\u0002\u0002\u0002\u0947\u0949",
    "\u0003\u0002\u0002\u0002\u0948\u0936\u0003\u0002\u0002\u0002\u0948\u093d",
    "\u0003\u0002\u0002\u0002\u0948\u0941\u0003\u0002\u0002\u0002\u0949\u00d9",
    "\u0003\u0002\u0002\u0002\u094a\u094f\u0005\u00dco\u0002\u094b\u094c",
    "\u0007\u01ae\u0002\u0002\u094c\u094e\u0005\u00dco\u0002\u094d\u094b",
    "\u0003\u0002\u0002\u0002\u094e\u0951\u0003\u0002\u0002\u0002\u094f\u094d",
    "\u0003\u0002\u0002\u0002\u094f\u0950\u0003\u0002\u0002\u0002\u0950\u00db",
    "\u0003\u0002\u0002\u0002\u0951\u094f\u0003\u0002\u0002\u0002\u0952\u0958",
    "\u0005\u00dep\u0002\u0953\u0954\u0007\u01ac\u0002\u0002\u0954\u0955",
    "\u0005\u00dep\u0002\u0955\u0956\u0007\u01ad\u0002\u0002\u0956\u0958",
    "\u0003\u0002\u0002\u0002\u0957\u0952\u0003\u0002\u0002\u0002\u0957\u0953",
    "\u0003\u0002\u0002\u0002\u0958\u00dd\u0003\u0002\u0002\u0002\u0959\u095d",
    "\u0005\u00e0q\u0002\u095a\u095c\u0005\u00e4s\u0002\u095b\u095a\u0003",
    "\u0002\u0002\u0002\u095c\u095f\u0003\u0002\u0002\u0002\u095d\u095b\u0003",
    "\u0002\u0002\u0002\u095d\u095e\u0003\u0002\u0002\u0002\u095e\u00df\u0003",
    "\u0002\u0002\u0002\u095f\u095d\u0003\u0002\u0002\u0002\u0960\u0962\u0005",
    "\u00e6t\u0002\u0961\u0963\u0005\u00f4{\u0002\u0962\u0961\u0003\u0002",
    "\u0002\u0002\u0962\u0963\u0003\u0002\u0002\u0002\u0963\u0984\u0003\u0002",
    "\u0002\u0002\u0964\u0966\u0005\u00e8u\u0002\u0965\u0967\u0005\u00f4",
    "{\u0002\u0966\u0965\u0003\u0002\u0002\u0002\u0966\u0967\u0003\u0002",
    "\u0002\u0002\u0967\u0984\u0003\u0002\u0002\u0002\u0968\u096d\u0005\u00ec",
    "w\u0002\u0969\u096b\u0005\u00f4{\u0002\u096a\u096c\u0005\u0100\u0081",
    "\u0002\u096b\u096a\u0003\u0002\u0002\u0002\u096b\u096c\u0003\u0002\u0002",
    "\u0002\u096c\u096e\u0003\u0002\u0002\u0002\u096d\u0969\u0003\u0002\u0002",
    "\u0002\u096d\u096e\u0003\u0002\u0002\u0002\u096e\u0984\u0003\u0002\u0002",
    "\u0002\u096f\u0970\u0005\u00e2r\u0002\u0970\u0971\u0005\u00f4{\u0002",
    "\u0971\u0984\u0003\u0002\u0002\u0002\u0972\u0974\u0005\u00eex\u0002",
    "\u0973\u0975\u0005\u00f4{\u0002\u0974\u0973\u0003\u0002\u0002\u0002",
    "\u0974\u0975\u0003\u0002\u0002\u0002\u0975\u0984\u0003\u0002\u0002\u0002",
    "\u0976\u0978\u0007\u0194\u0002\u0002\u0977\u0979\u0005\u00f4{\u0002",
    "\u0978\u0977\u0003\u0002\u0002\u0002\u0978\u0979\u0003\u0002\u0002\u0002",
    "\u0979\u0984\u0003\u0002\u0002\u0002\u097a\u097b\u0007\u0194\u0002\u0002",
    "\u097b\u097c\u0007\u01a7\u0002\u0002\u097c\u0981\u0005\u00eex\u0002",
    "\u097d\u097f\u0005\u00f4{\u0002\u097e\u0980\u0005\u0100\u0081\u0002",
    "\u097f\u097e\u0003\u0002\u0002\u0002\u097f\u0980\u0003\u0002\u0002\u0002",
    "\u0980\u0982\u0003\u0002\u0002\u0002\u0981\u097d\u0003\u0002\u0002\u0002",
    "\u0981\u0982\u0003\u0002\u0002\u0002\u0982\u0984\u0003\u0002\u0002\u0002",
    "\u0983\u0960\u0003\u0002\u0002\u0002\u0983\u0964\u0003\u0002\u0002\u0002",
    "\u0983\u0968\u0003\u0002\u0002\u0002\u0983\u096f\u0003\u0002\u0002\u0002",
    "\u0983\u0972\u0003\u0002\u0002\u0002\u0983\u0976\u0003\u0002\u0002\u0002",
    "\u0983\u097a\u0003\u0002\u0002\u0002\u0984\u00e1\u0003\u0002\u0002\u0002",
    "\u0985\u0986\u0007\u0015\u0002\u0002\u0986\u0987\u0007\u01ac\u0002\u0002",
    "\u0987\u0988\u0007\u0016\u0002\u0002\u0988\u0989\u0005\u0128\u0095\u0002",
    "\u0989\u098a\u0007\u01ae\u0002\u0002\u098a\u098b\t,\u0002\u0002\u098b",
    "\u098c\u0007\u01ad\u0002\u0002\u098c\u00e3\u0003\u0002\u0002\u0002\u098d",
    "\u098f\u0007[\u0002\u0002\u098e\u098d\u0003\u0002\u0002\u0002\u098e",
    "\u098f\u0003\u0002\u0002\u0002\u098f\u0995\u0003\u0002\u0002\u0002\u0990",
    "\u0992\t-\u0002\u0002\u0991\u0993\u0007|\u0002\u0002\u0992\u0991\u0003",
    "\u0002\u0002\u0002\u0992\u0993\u0003\u0002\u0002\u0002\u0993\u0995\u0003",
    "\u0002\u0002\u0002\u0994\u098e\u0003\u0002\u0002\u0002\u0994\u0990\u0003",
    "\u0002\u0002\u0002\u0995\u0997\u0003\u0002\u0002\u0002\u0996\u0998\t",
    ".\u0002\u0002\u0997\u0996\u0003\u0002\u0002\u0002\u0997\u0998\u0003",
    "\u0002\u0002\u0002\u0998\u0999\u0003\u0002\u0002\u0002\u0999\u099a\u0007",
    "`\u0002\u0002\u099a\u099b\u0005\u00dco\u0002\u099b\u099c\u0007s\u0002",
    "\u0002\u099c\u099d\u0005\u00ba^\u0002\u099d\u09a8\u0003\u0002\u0002",
    "\u0002\u099e\u099f\u0007\'\u0002\u0002\u099f\u09a0\u0007`\u0002\u0002",
    "\u09a0\u09a8\u0005\u00dco\u0002\u09a1\u09a2\u0007\'\u0002\u0002\u09a2",
    "\u09a3\u0007\u00cb\u0002\u0002\u09a3\u09a8\u0005\u00dco\u0002\u09a4",
    "\u09a5\u0007|\u0002\u0002\u09a5\u09a6\u0007\u00cb\u0002\u0002\u09a6",
    "\u09a8\u0005\u00dco\u0002\u09a7\u0994\u0003\u0002\u0002\u0002\u09a7",
    "\u099e\u0003\u0002\u0002\u0002\u09a7\u09a1\u0003\u0002\u0002\u0002\u09a7",
    "\u09a4\u0003\u0002\u0002\u0002\u09a8\u00e5\u0003\u0002\u0002\u0002\u09a9",
    "\u09ab\u0005\u0128\u0095\u0002\u09aa\u09ac\u0005\u00f8}\u0002\u09ab",
    "\u09aa\u0003\u0002\u0002\u0002\u09ab\u09ac\u0003\u0002\u0002\u0002\u09ac",
    "\u00e7\u0003\u0002\u0002\u0002\u09ad\u09ae\u0007w\u0002\u0002\u09ae",
    "\u09af\u0007\u01ac\u0002\u0002\u09af\u09b0\u0007\u0197\u0002\u0002\u09b0",
    "\u09b1\u0007\u01ae\u0002\u0002\u09b1\u09b2\u0007\u0197\u0002\u0002\u09b2",
    "\u09b3\u0007\u01ae\u0002\u0002\u09b3\u09b4\u0007\u0197\u0002\u0002\u09b4",
    "\u09c8\u0007\u01ad\u0002\u0002\u09b5\u09b6\u0007w\u0002\u0002\u09b6",
    "\u09b7\u0007\u01ac\u0002\u0002\u09b7\u09b8\u0007\u0011\u0002\u0002\u09b8",
    "\u09b9\u0007\u0197\u0002\u0002\u09b9\u09c3\u0007\u01ae\u0002\u0002\u09ba",
    "\u09bf\u0005\u00eav\u0002\u09bb\u09bc\u0007\u01ae\u0002\u0002\u09bc",
    "\u09be\u0005\u00eav\u0002\u09bd\u09bb\u0003\u0002\u0002\u0002\u09be",
    "\u09c1\u0003\u0002\u0002\u0002\u09bf\u09bd\u0003\u0002\u0002\u0002\u09bf",
    "\u09c0\u0003\u0002\u0002\u0002\u09c0\u09c4\u0003\u0002\u0002\u0002\u09c1",
    "\u09bf\u0003\u0002\u0002\u0002\u09c2\u09c4\u0005\u0146\u00a4\u0002\u09c3",
    "\u09ba\u0003\u0002\u0002\u0002\u09c3\u09c2\u0003\u0002\u0002\u0002\u09c4",
    "\u09c5\u0003\u0002\u0002\u0002\u09c5\u09c6\u0007\u01ad\u0002\u0002\u09c6",
    "\u09c8\u0003\u0002\u0002\u0002\u09c7\u09ad\u0003\u0002\u0002\u0002\u09c7",
    "\u09b5\u0003\u0002\u0002\u0002\u09c8\u00e9\u0003\u0002\u0002\u0002\u09c9",
    "\u09ca\u0005\u0146\u00a4\u0002\u09ca\u09cb\u0007\u019b\u0002\u0002\u09cb",
    "\u09cc\t/\u0002\u0002\u09cc\u00eb\u0003\u0002\u0002\u0002\u09cd\u09d3",
    "\u0005\u00b0Y\u0002\u09ce\u09cf\u0007\u01ac\u0002\u0002\u09cf\u09d0",
    "\u0005\u00b0Y\u0002\u09d0\u09d1\u0007\u01ad\u0002\u0002\u09d1\u09d3",
    "\u0003\u0002\u0002\u0002\u09d2\u09cd\u0003\u0002\u0002\u0002\u09d2\u09ce",
    "\u0003\u0002\u0002\u0002\u09d3\u00ed\u0003\u0002\u0002\u0002\u09d4\u0a36",
    "\u0005\u010a\u0086\u0002\u09d5\u0a36\u0005\u010c\u0087\u0002\u09d6\u09d7",
    "\u0005\u013c\u009f\u0002\u09d7\u09d9\u0007\u01ac\u0002\u0002\u09d8\u09da",
    "\u0005\u0108\u0085\u0002\u09d9\u09d8\u0003\u0002\u0002\u0002\u09d9\u09da",
    "\u0003\u0002\u0002\u0002\u09da\u09db\u0003\u0002\u0002\u0002\u09db\u09dc",
    "\u0007\u01ad\u0002\u0002\u09dc\u0a36\u0003\u0002\u0002\u0002\u09dd\u09de",
    "\u0007\u00d6\u0002\u0002\u09de\u09df\u0007\u01ac\u0002\u0002\u09df\u09e0",
    "\u0007\u01b1\u0002\u0002\u09e0\u0a36\u0007\u01ad\u0002\u0002\u09e1\u09e2",
    "\u0007\u00d9\u0002\u0002\u09e2\u09e3\u0007\u01ac\u0002\u0002\u09e3\u09e4",
    "\u0005\u00acW\u0002\u09e4\u09e5\u0007\t\u0002\u0002\u09e5\u09e6\u0005",
    "\u013e\u00a0\u0002\u09e6\u09e7\u0007\u01ad\u0002\u0002\u09e7\u0a36\u0003",
    "\u0002\u0002\u0002\u09e8\u09e9\u0007%\u0002\u0002\u09e9\u09ea\u0007",
    "\u01ac\u0002\u0002\u09ea\u09eb\u0005\u013e\u00a0\u0002\u09eb\u09ec\u0007",
    "\u01ae\u0002\u0002\u09ec\u09ef\u0005\u00acW\u0002\u09ed\u09ee\u0007",
    "\u01ae\u0002\u0002\u09ee\u09f0\u0005\u00acW\u0002\u09ef\u09ed\u0003",
    "\u0002\u0002\u0002\u09ef\u09f0\u0003\u0002\u0002\u0002\u09f0\u09f1\u0003",
    "\u0002\u0002\u0002\u09f1\u09f2\u0007\u01ad\u0002\u0002\u09f2\u0a36\u0003",
    "\u0002\u0002\u0002\u09f3\u09f4\u0007\u00dd\u0002\u0002\u09f4\u09f5\u0007",
    "\u01ac\u0002\u0002\u09f5\u09f6\u0007\u01b1\u0002\u0002\u09f6\u0a36\u0007",
    "\u01ad\u0002\u0002\u09f7\u09f8\u0007\u001b\u0002\u0002\u09f8\u09f9\u0007",
    "\u01ac\u0002\u0002\u09f9\u09fa\u0005\u0108\u0085\u0002\u09fa\u09fb\u0007",
    "\u01ad\u0002\u0002\u09fb\u0a36\u0003\u0002\u0002\u0002\u09fc\u0a36\u0007",
    "+\u0002\u0002\u09fd\u0a36\u0007,\u0002\u0002\u09fe\u09ff\u0007\u00e9",
    "\u0002\u0002\u09ff\u0a00\u0007\u01ac\u0002\u0002\u0a00\u0a01\u0007\u0196",
    "\u0002\u0002\u0a01\u0a02\u0007\u01ae\u0002\u0002\u0a02\u0a03\u0005\u00ac",
    "W\u0002\u0a03\u0a04\u0007\u01ae\u0002\u0002\u0a04\u0a05\u0005\u00ac",
    "W\u0002\u0a05\u0a06\u0007\u01ad\u0002\u0002\u0a06\u0a36\u0003\u0002",
    "\u0002\u0002\u0a07\u0a08\u0007\u00ea\u0002\u0002\u0a08\u0a09\u0007\u01ac",
    "\u0002\u0002\u0a09\u0a0a\u0007\u0196\u0002\u0002\u0a0a\u0a0b\u0007\u01ae",
    "\u0002\u0002\u0a0b\u0a0c\u0005\u00acW\u0002\u0a0c\u0a0d\u0007\u01ae",
    "\u0002\u0002\u0a0d\u0a0e\u0005\u00acW\u0002\u0a0e\u0a0f\u0007\u01ad",
    "\u0002\u0002\u0a0f\u0a36\u0003\u0002\u0002\u0002\u0a10\u0a11\u0007\u00eb",
    "\u0002\u0002\u0a11\u0a12\u0007\u01ac\u0002\u0002\u0a12\u0a13\u0007\u0196",
    "\u0002\u0002\u0a13\u0a14\u0007\u01ae\u0002\u0002\u0a14\u0a15\u0005\u00ac",
    "W\u0002\u0a15\u0a16\u0007\u01ad\u0002\u0002\u0a16\u0a36\u0003\u0002",
    "\u0002\u0002\u0a17\u0a18\u0007\u00ec\u0002\u0002\u0a18\u0a19\u0007\u01ac",
    "\u0002\u0002\u0a19\u0a1a\u0007\u0196\u0002\u0002\u0a1a\u0a1b\u0007\u01ae",
    "\u0002\u0002\u0a1b\u0a1c\u0005\u00acW\u0002\u0a1c\u0a1d\u0007\u01ad",
    "\u0002\u0002\u0a1d\u0a36\u0003\u0002\u0002\u0002\u0a1e\u0a1f\u0007U",
    "\u0002\u0002\u0a1f\u0a20\u0007\u01ac\u0002\u0002\u0a20\u0a23\u0005\u013e",
    "\u00a0\u0002\u0a21\u0a22\u0007\u01ae\u0002\u0002\u0a22\u0a24\u0007\u0195",
    "\u0002\u0002\u0a23\u0a21\u0003\u0002\u0002\u0002\u0a23\u0a24\u0003\u0002",
    "\u0002\u0002\u0a24\u0a27\u0003\u0002\u0002\u0002\u0a25\u0a26\u0007\u01ae",
    "\u0002\u0002\u0a26\u0a28\u0007\u0195\u0002\u0002\u0a27\u0a25\u0003\u0002",
    "\u0002\u0002\u0a27\u0a28\u0003\u0002\u0002\u0002\u0a28\u0a29\u0003\u0002",
    "\u0002\u0002\u0a29\u0a2a\u0007\u01ad\u0002\u0002\u0a2a\u0a36\u0003\u0002",
    "\u0002\u0002\u0a2b\u0a36\u0007\u012e\u0002\u0002\u0a2c\u0a2d\u0007o",
    "\u0002\u0002\u0a2d\u0a2e\u0007\u01ac\u0002\u0002\u0a2e\u0a2f\u0005\u00ac",
    "W\u0002\u0a2f\u0a30\u0007\u01ae\u0002\u0002\u0a30\u0a31\u0005\u00ac",
    "W\u0002\u0a31\u0a32\u0007\u01ad\u0002\u0002\u0a32\u0a36\u0003\u0002",
    "\u0002\u0002\u0a33\u0a36\u0007\u009f\u0002\u0002\u0a34\u0a36\u0007\u00a5",
    "\u0002\u0002\u0a35\u09d4\u0003\u0002\u0002\u0002\u0a35\u09d5\u0003\u0002",
    "\u0002\u0002\u0a35\u09d6\u0003\u0002\u0002\u0002\u0a35\u09dd\u0003\u0002",
    "\u0002\u0002\u0a35\u09e1\u0003\u0002\u0002\u0002\u0a35\u09e8\u0003\u0002",
    "\u0002\u0002\u0a35\u09f3\u0003\u0002\u0002\u0002\u0a35\u09f7\u0003\u0002",
    "\u0002\u0002\u0a35\u09fc\u0003\u0002\u0002\u0002\u0a35\u09fd\u0003\u0002",
    "\u0002\u0002\u0a35\u09fe\u0003\u0002\u0002\u0002\u0a35\u0a07\u0003\u0002",
    "\u0002\u0002\u0a35\u0a10\u0003\u0002\u0002\u0002\u0a35\u0a17\u0003\u0002",
    "\u0002\u0002\u0a35\u0a1e\u0003\u0002\u0002\u0002\u0a35\u0a2b\u0003\u0002",
    "\u0002\u0002\u0a35\u0a2c\u0003\u0002\u0002\u0002\u0a35\u0a33\u0003\u0002",
    "\u0002\u0002\u0a35\u0a34\u0003\u0002\u0002\u0002\u0a36\u00ef\u0003\u0002",
    "\u0002\u0002\u0a37\u0a38\u0007\u00bd\u0002\u0002\u0a38\u0a39\u0005\u00ac",
    "W\u0002\u0a39\u0a3a\u0007\u00a9\u0002\u0002\u0a3a\u0a3b\u0005\u00ac",
    "W\u0002\u0a3b\u00f1\u0003\u0002\u0002\u0002\u0a3c\u0a3d\u0007\u00bd",
    "\u0002\u0002\u0a3d\u0a3e\u0005\u00ba^\u0002\u0a3e\u0a3f\u0007\u00a9",
    "\u0002\u0002\u0a3f\u0a40\u0005\u00acW\u0002\u0a40\u00f3\u0003\u0002",
    "\u0002\u0002\u0a41\u0a43\u0007\t\u0002\u0002\u0a42\u0a41\u0003\u0002",
    "\u0002\u0002\u0a42\u0a43\u0003\u0002\u0002\u0002\u0a43\u0a44\u0003\u0002",
    "\u0002\u0002\u0a44\u0a45\u0005\u00f6|\u0002\u0a45\u00f5\u0003\u0002",
    "\u0002\u0002\u0a46\u0a48\u0005\u0146\u00a4\u0002\u0a47\u0a49\u0005\u00f8",
    "}\u0002\u0a48\u0a47\u0003\u0002\u0002\u0002\u0a48\u0a49\u0003\u0002",
    "\u0002\u0002\u0a49\u00f7\u0003\u0002\u0002\u0002\u0a4a\u0a4c\u0007\u00c0",
    "\u0002\u0002\u0a4b\u0a4a\u0003\u0002\u0002\u0002\u0a4b\u0a4c\u0003\u0002",
    "\u0002\u0002\u0a4c\u0a4d\u0003\u0002\u0002\u0002\u0a4d\u0a4e\u0007\u01ac",
    "\u0002\u0002\u0a4e\u0a53\u0005\u00fc\u007f\u0002\u0a4f\u0a50\u0007\u01ae",
    "\u0002\u0002\u0a50\u0a52\u0005\u00fc\u007f\u0002\u0a51\u0a4f\u0003\u0002",
    "\u0002\u0002\u0a52\u0a55\u0003\u0002\u0002\u0002\u0a53\u0a51\u0003\u0002",
    "\u0002\u0002\u0a53\u0a54\u0003\u0002\u0002\u0002\u0a54\u0a56\u0003\u0002",
    "\u0002\u0002\u0a55\u0a53\u0003\u0002\u0002\u0002\u0a56\u0a57\u0007\u01ad",
    "\u0002\u0002\u0a57\u00f9\u0003\u0002\u0002\u0002\u0a58\u0a59\u0007\u00c0",
    "\u0002\u0002\u0a59\u0a5a\u0007\u01ac\u0002\u0002\u0a5a\u0a5f\u0005\u00fc",
    "\u007f\u0002\u0a5b\u0a5c\u0007\u01ae\u0002\u0002\u0a5c\u0a5e\u0005\u00fc",
    "\u007f\u0002\u0a5d\u0a5b\u0003\u0002\u0002\u0002\u0a5e\u0a61\u0003\u0002",
    "\u0002\u0002\u0a5f\u0a5d\u0003\u0002\u0002\u0002\u0a5f\u0a60\u0003\u0002",
    "\u0002\u0002\u0a60\u0a62\u0003\u0002\u0002\u0002\u0a61\u0a5f\u0003\u0002",
    "\u0002\u0002\u0a62\u0a63\u0007\u01ad\u0002\u0002\u0a63\u00fb\u0003\u0002",
    "\u0002\u0002\u0a64\u0a66\u0007\u0137\u0002\u0002\u0a65\u0a64\u0003\u0002",
    "\u0002\u0002\u0a65\u0a66\u0003\u0002\u0002\u0002\u0a66\u0a8d\u0003\u0002",
    "\u0002\u0002\u0a67\u0a68\u0007Z\u0002\u0002\u0a68\u0a69\u0007\u01ac",
    "\u0002\u0002\u0a69\u0a6e\u0005\u00fe\u0080\u0002\u0a6a\u0a6b\u0007\u01ae",
    "\u0002\u0002\u0a6b\u0a6d\u0005\u00fe\u0080\u0002\u0a6c\u0a6a\u0003\u0002",
    "\u0002\u0002\u0a6d\u0a70\u0003\u0002\u0002\u0002\u0a6e\u0a6c\u0003\u0002",
    "\u0002\u0002\u0a6e\u0a6f\u0003\u0002\u0002\u0002\u0a6f\u0a71\u0003\u0002",
    "\u0002\u0002\u0a70\u0a6e\u0003\u0002\u0002\u0002\u0a71\u0a72\u0007\u01ad",
    "\u0002\u0002\u0a72\u0a8e\u0003\u0002\u0002\u0002\u0a73\u0a74\u0007Z",
    "\u0002\u0002\u0a74\u0a75\u0007\u019b\u0002\u0002\u0a75\u0a8e\u0005\u00fe",
    "\u0080\u0002\u0a76\u0a85\u0007J\u0002\u0002\u0a77\u0a78\u0007\u01ac",
    "\u0002\u0002\u0a78\u0a79\u0005\u00fe\u0080\u0002\u0a79\u0a7a\u0007\u01ac",
    "\u0002\u0002\u0a7a\u0a7f\u0007\u0196\u0002\u0002\u0a7b\u0a7c\u0007\u01ae",
    "\u0002\u0002\u0a7c\u0a7e\u0007\u0196\u0002\u0002\u0a7d\u0a7b\u0003\u0002",
    "\u0002\u0002\u0a7e\u0a81\u0003\u0002\u0002\u0002\u0a7f\u0a7d\u0003\u0002",
    "\u0002\u0002\u0a7f\u0a80\u0003\u0002\u0002\u0002\u0a80\u0a82\u0003\u0002",
    "\u0002\u0002\u0a81\u0a7f\u0003\u0002\u0002\u0002\u0a82\u0a83\u0007\u01ad",
    "\u0002\u0002\u0a83\u0a84\u0007\u01ad\u0002\u0002\u0a84\u0a86\u0003\u0002",
    "\u0002\u0002\u0a85\u0a77\u0003\u0002\u0002\u0002\u0a85\u0a86\u0003\u0002",
    "\u0002\u0002\u0a86\u0a8e\u0003\u0002\u0002\u0002\u0a87\u0a8e\u0007\u0168",
    "\u0002\u0002\u0a88\u0a8e\u0007\u016d\u0002\u0002\u0a89\u0a8a\u0007\u016e",
    "\u0002\u0002\u0a8a\u0a8b\u0007\u019b\u0002\u0002\u0a8b\u0a8e\u0007\u0195",
    "\u0002\u0002\u0a8c\u0a8e\u0007\u0196\u0002\u0002\u0a8d\u0a67\u0003\u0002",
    "\u0002\u0002\u0a8d\u0a73\u0003\u0002\u0002\u0002\u0a8d\u0a76\u0003\u0002",
    "\u0002\u0002\u0a8d\u0a87\u0003\u0002\u0002\u0002\u0a8d\u0a88\u0003\u0002",
    "\u0002\u0002\u0a8d\u0a89\u0003\u0002\u0002\u0002\u0a8d\u0a8c\u0003\u0002",
    "\u0002\u0002\u0a8d\u0a8e\u0003\u0002\u0002\u0002\u0a8e\u00fd\u0003\u0002",
    "\u0002\u0002\u0a8f\u0a92\u0005\u0146\u00a4\u0002\u0a90\u0a92\u0007\u0195",
    "\u0002\u0002\u0a91\u0a8f\u0003\u0002\u0002\u0002\u0a91\u0a90\u0003\u0002",
    "\u0002\u0002\u0a92\u00ff\u0003\u0002\u0002\u0002\u0a93\u0a94\u0007\u01ac",
    "\u0002\u0002\u0a94\u0a99\u0005\u0102\u0082\u0002\u0a95\u0a96\u0007\u01ae",
    "\u0002\u0002\u0a96\u0a98\u0005\u0102\u0082\u0002\u0a97\u0a95\u0003\u0002",
    "\u0002\u0002\u0a98\u0a9b\u0003\u0002\u0002\u0002\u0a99\u0a97\u0003\u0002",
    "\u0002\u0002\u0a99\u0a9a\u0003\u0002\u0002\u0002\u0a9a\u0a9c\u0003\u0002",
    "\u0002\u0002\u0a9b\u0a99\u0003\u0002\u0002\u0002\u0a9c\u0a9d\u0007\u01ad",
    "\u0002\u0002\u0a9d\u0101\u0003\u0002\u0002\u0002\u0a9e\u0aa1\u0005\u0146",
    "\u00a4\u0002\u0a9f\u0aa1\u0007\u0197\u0002\u0002\u0aa0\u0a9e\u0003\u0002",
    "\u0002\u0002\u0aa0\u0a9f\u0003\u0002\u0002\u0002\u0aa1\u0103\u0003\u0002",
    "\u0002\u0002\u0aa2\u0aa3\u0007\u01b1\u0002\u0002\u0aa3\u0105\u0003\u0002",
    "\u0002\u0002\u0aa4\u0aa5\u0007\u00b9\u0002\u0002\u0aa5\u0aa6\u0007\u01ac",
    "\u0002\u0002\u0aa6\u0aa7\u0005\u0108\u0085\u0002\u0aa7\u0aaf\u0007\u01ad",
    "\u0002\u0002\u0aa8\u0aa9\u0007\u01ae\u0002\u0002\u0aa9\u0aaa\u0007\u01ac",
    "\u0002\u0002\u0aaa\u0aab\u0005\u0108\u0085\u0002\u0aab\u0aac\u0007\u01ad",
    "\u0002\u0002\u0aac\u0aae\u0003\u0002\u0002\u0002\u0aad\u0aa8\u0003\u0002",
    "\u0002\u0002\u0aae\u0ab1\u0003\u0002\u0002\u0002\u0aaf\u0aad\u0003\u0002",
    "\u0002\u0002\u0aaf\u0ab0\u0003\u0002\u0002\u0002\u0ab0\u0107\u0003\u0002",
    "\u0002\u0002\u0ab1\u0aaf\u0003\u0002\u0002\u0002\u0ab2\u0ab7\u0005\u00ac",
    "W\u0002\u0ab3\u0ab4\u0007\u01ae\u0002\u0002\u0ab4\u0ab6\u0005\u00ac",
    "W\u0002\u0ab5\u0ab3\u0003\u0002\u0002\u0002\u0ab6\u0ab9\u0003\u0002",
    "\u0002\u0002\u0ab7\u0ab5\u0003\u0002\u0002\u0002\u0ab7\u0ab8\u0003\u0002",
    "\u0002\u0002\u0ab8\u0109\u0003\u0002\u0002\u0002\u0ab9\u0ab7\u0003\u0002",
    "\u0002\u0002\u0aba\u0abb\t0\u0002\u0002\u0abb\u0abc\u0007\u01ac\u0002",
    "\u0002\u0abc\u0abd\u0007\u01ad\u0002\u0002\u0abd\u0ac5\u0005\u0110\u0089",
    "\u0002\u0abe\u0abf\u0007\u013b\u0002\u0002\u0abf\u0ac0\u0007\u01ac\u0002",
    "\u0002\u0ac0\u0ac1\u0005\u00acW\u0002\u0ac1\u0ac2\u0007\u01ad\u0002",
    "\u0002\u0ac2\u0ac3\u0005\u0110\u0089\u0002\u0ac3\u0ac5\u0003\u0002\u0002",
    "\u0002\u0ac4\u0aba\u0003\u0002\u0002\u0002\u0ac4\u0abe\u0003\u0002\u0002",
    "\u0002\u0ac5\u010b\u0003\u0002\u0002\u0002\u0ac6\u0ac7\t1\u0002\u0002",
    "\u0ac7\u0ac9\u0007\u01ac\u0002\u0002\u0ac8\u0aca\u0005\u010e\u0088\u0002",
    "\u0ac9\u0ac8\u0003\u0002\u0002\u0002\u0ac9\u0aca\u0003\u0002\u0002\u0002",
    "\u0aca\u0acb\u0003\u0002\u0002\u0002\u0acb\u0acc\u0005\u00acW\u0002",
    "\u0acc\u0ace\u0007\u01ad\u0002\u0002\u0acd\u0acf\u0005\u0110\u0089\u0002",
    "\u0ace\u0acd\u0003\u0002\u0002\u0002\u0ace\u0acf\u0003\u0002\u0002\u0002",
    "\u0acf\u0af0\u0003\u0002\u0002\u0002\u0ad0\u0ad1\t2\u0002\u0002\u0ad1",
    "\u0ad7\u0007\u01ac\u0002\u0002\u0ad2\u0ad8\u0007\u01b1\u0002\u0002\u0ad3",
    "\u0ad5\u0005\u010e\u0088\u0002\u0ad4\u0ad3\u0003\u0002\u0002\u0002\u0ad4",
    "\u0ad5\u0003\u0002\u0002\u0002\u0ad5\u0ad6\u0003\u0002\u0002\u0002\u0ad6",
    "\u0ad8\u0005\u00acW\u0002\u0ad7\u0ad2\u0003\u0002\u0002\u0002\u0ad7",
    "\u0ad4\u0003\u0002\u0002\u0002\u0ad8\u0ad9\u0003\u0002\u0002\u0002\u0ad9",
    "\u0adb\u0007\u01ad\u0002\u0002\u0ada\u0adc\u0005\u0110\u0089\u0002\u0adb",
    "\u0ada\u0003\u0002\u0002\u0002\u0adb\u0adc\u0003\u0002\u0002\u0002\u0adc",
    "\u0af0\u0003\u0002\u0002\u0002\u0add\u0ade\u0007\u00de\u0002\u0002\u0ade",
    "\u0ae0\u0007\u01ac\u0002\u0002\u0adf\u0ae1\u0005\u010e\u0088\u0002\u0ae0",
    "\u0adf\u0003\u0002\u0002\u0002\u0ae0\u0ae1\u0003\u0002\u0002\u0002\u0ae1",
    "\u0ae2\u0003\u0002\u0002\u0002\u0ae2\u0ae3\u0005\u00acW\u0002\u0ae3",
    "\u0ae4\u0007\u01ad\u0002\u0002\u0ae4\u0af0\u0003\u0002\u0002\u0002\u0ae5",
    "\u0ae6\u0007\u010e\u0002\u0002\u0ae6\u0ae7\u0007\u01ac\u0002\u0002\u0ae7",
    "\u0ae8\u0005\u00acW\u0002\u0ae8\u0ae9\u0007\u01ad\u0002\u0002\u0ae9",
    "\u0af0\u0003\u0002\u0002\u0002\u0aea\u0aeb\u0007\u010f\u0002\u0002\u0aeb",
    "\u0aec\u0007\u01ac\u0002\u0002\u0aec\u0aed\u0005\u0108\u0085\u0002\u0aed",
    "\u0aee\u0007\u01ad\u0002\u0002\u0aee\u0af0\u0003\u0002\u0002\u0002\u0aef",
    "\u0ac6\u0003\u0002\u0002\u0002\u0aef\u0ad0\u0003\u0002\u0002\u0002\u0aef",
    "\u0add\u0003\u0002\u0002\u0002\u0aef\u0ae5\u0003\u0002\u0002\u0002\u0aef",
    "\u0aea\u0003\u0002\u0002\u0002\u0af0\u010d\u0003\u0002\u0002\u0002\u0af1",
    "\u0af2\t%\u0002\u0002\u0af2\u010f\u0003\u0002\u0002\u0002\u0af3\u0af4",
    "\u0007}\u0002\u0002\u0af4\u0af8\u0007\u01ac\u0002\u0002\u0af5\u0af6",
    "\u0007\u0149\u0002\u0002\u0af6\u0af7\u0007\u0012\u0002\u0002\u0af7\u0af9",
    "\u0005\u0108\u0085\u0002\u0af8\u0af5\u0003\u0002\u0002\u0002\u0af8\u0af9",
    "\u0003\u0002\u0002\u0002\u0af9\u0afb\u0003\u0002\u0002\u0002\u0afa\u0afc",
    "\u0005\u00c6d\u0002\u0afb\u0afa\u0003\u0002\u0002\u0002\u0afb\u0afc",
    "\u0003\u0002\u0002\u0002\u0afc\u0afe\u0003\u0002\u0002\u0002\u0afd\u0aff",
    "\u0005\u0112\u008a\u0002\u0afe\u0afd\u0003\u0002\u0002\u0002\u0afe\u0aff",
    "\u0003\u0002\u0002\u0002\u0aff\u0b00\u0003\u0002\u0002\u0002\u0b00\u0b01",
    "\u0007\u01ad\u0002\u0002\u0b01\u0111\u0003\u0002\u0002\u0002\u0b02\u0b03",
    "\t3\u0002\u0002\u0b03\u0b04\u0005\u0114\u008b\u0002\u0b04\u0113\u0003",
    "\u0002\u0002\u0002\u0b05\u0b0c\u0005\u0118\u008d\u0002\u0b06\u0b07\u0007",
    "\u000e\u0002\u0002\u0b07\u0b08\u0005\u0116\u008c\u0002\u0b08\u0b09\u0007",
    "\u0007\u0002\u0002\u0b09\u0b0a\u0005\u0116\u008c\u0002\u0b0a\u0b0c\u0003",
    "\u0002\u0002\u0002\u0b0b\u0b05\u0003\u0002\u0002\u0002\u0b0b\u0b06\u0003",
    "\u0002\u0002\u0002\u0b0c\u0115\u0003\u0002\u0002\u0002\u0b0d\u0b10\u0005",
    "\u0118\u008d\u0002\u0b0e\u0b10\u0005\u011a\u008e\u0002\u0b0f\u0b0d\u0003",
    "\u0002\u0002\u0002\u0b0f\u0b0e\u0003\u0002\u0002\u0002\u0b10\u0117\u0003",
    "\u0002\u0002\u0002\u0b11\u0b12\u0007\u0182\u0002\u0002\u0b12\u0b18\u0007",
    "\u014b\u0002\u0002\u0b13\u0b14\u0007\u0195\u0002\u0002\u0b14\u0b18\u0007",
    "\u014b\u0002\u0002\u0b15\u0b16\u0007(\u0002\u0002\u0b16\u0b18\u0007",
    "\u015e\u0002\u0002\u0b17\u0b11\u0003\u0002\u0002\u0002\u0b17\u0b13\u0003",
    "\u0002\u0002\u0002\u0b17\u0b15\u0003\u0002\u0002\u0002\u0b18\u0119\u0003",
    "\u0002\u0002\u0002\u0b19\u0b1a\u0007\u0182\u0002\u0002\u0b1a\u0b1e\u0007",
    "\u0106\u0002\u0002\u0b1b\u0b1c\u0007\u0195\u0002\u0002\u0b1c\u0b1e\u0007",
    "\u0106\u0002\u0002\u0b1d\u0b19\u0003\u0002\u0002\u0002\u0b1d\u0b1b\u0003",
    "\u0002\u0002\u0002\u0b1e\u011b\u0003\u0002\u0002\u0002\u0b1f\u0b20\u0007",
    "\u0104\u0002\u0002\u0b20\u0b25\u0005\u011e\u0090\u0002\u0b21\u0b22\u0007",
    "\u01ae\u0002\u0002\u0b22\u0b24\u0005\u011e\u0090\u0002\u0b23\u0b21\u0003",
    "\u0002\u0002\u0002\u0b24\u0b27\u0003\u0002\u0002\u0002\u0b25\u0b23\u0003",
    "\u0002\u0002\u0002\u0b25\u0b26\u0003\u0002\u0002\u0002\u0b26\u0b42\u0003",
    "\u0002\u0002\u0002\u0b27\u0b25\u0003\u0002\u0002\u0002\u0b28\u0b29\u0007",
    "\u00f1\u0002\u0002\u0b29\u0b2c\u0007\u019b\u0002\u0002\u0b2a\u0b2d\u0005",
    "\u0146\u00a4\u0002\u0b2b\u0b2d\u0007\u0197\u0002\u0002\u0b2c\u0b2a\u0003",
    "\u0002\u0002\u0002\u0b2c\u0b2b\u0003\u0002\u0002\u0002\u0b2d\u0b42\u0003",
    "\u0002\u0002\u0002\u0b2e\u0b2f\u0007\u00f0\u0002\u0002\u0b2f\u0b32\u0007",
    "\u019b\u0002\u0002\u0b30\u0b33\u0005\u0146\u00a4\u0002\u0b31\u0b33\u0007",
    "\u0197\u0002\u0002\u0b32\u0b30\u0003\u0002\u0002\u0002\u0b32\u0b31\u0003",
    "\u0002\u0002\u0002\u0b33\u0b42\u0003\u0002\u0002\u0002\u0b34\u0b35\u0007",
    "\u0133\u0002\u0002\u0b35\u0b36\u0007\u019b\u0002\u0002\u0b36\u0b42\t",
    "\r\u0002\u0002\u0b37\u0b38\u0007\u017c\u0002\u0002\u0b38\u0b39\u0007",
    "\u019b\u0002\u0002\u0b39\u0b42\t\r\u0002\u0002\u0b3a\u0b3b\u0007\u017f",
    "\u0002\u0002\u0b3b\u0b3c\u0007\u019b\u0002\u0002\u0b3c\u0b42\u0007\u0195",
    "\u0002\u0002\u0b3d\u0b3e\u0007\u00ef\u0002\u0002\u0b3e\u0b42\t\r\u0002",
    "\u0002\u0b3f\u0b40\u0007\u017d\u0002\u0002\u0b40\u0b42\t\r\u0002\u0002",
    "\u0b41\u0b1f\u0003\u0002\u0002\u0002\u0b41\u0b28\u0003\u0002\u0002\u0002",
    "\u0b41\u0b2e\u0003\u0002\u0002\u0002\u0b41\u0b34\u0003\u0002\u0002\u0002",
    "\u0b41\u0b37\u0003\u0002\u0002\u0002\u0b41\u0b3a\u0003\u0002\u0002\u0002",
    "\u0b41\u0b3d\u0003\u0002\u0002\u0002\u0b41\u0b3f\u0003\u0002\u0002\u0002",
    "\u0b42\u011d\u0003\u0002\u0002\u0002\u0b43\u0b4a\u0007\u01ac\u0002\u0002",
    "\u0b44\u0b45\u0007\u0138\u0002\u0002\u0b45\u0b46\u0007\u019b\u0002\u0002",
    "\u0b46\u0b4b\t4\u0002\u0002\u0b47\u0b48\u0007\u00f6\u0002\u0002\u0b48",
    "\u0b49\u0007\u019b\u0002\u0002\u0b49\u0b4b\u0007\u0197\u0002\u0002\u0b4a",
    "\u0b44\u0003\u0002\u0002\u0002\u0b4a\u0b47\u0003\u0002\u0002\u0002\u0b4b",
    "\u0b4c\u0003\u0002\u0002\u0002\u0b4c\u0b4d\u0007\u01ad\u0002\u0002\u0b4d",
    "\u011f\u0003\u0002\u0002\u0002\u0b4e\u0b51\u0005\u0122\u0092\u0002\u0b4f",
    "\u0b51\u0005\u0124\u0093\u0002\u0b50\u0b4e\u0003\u0002\u0002\u0002\u0b50",
    "\u0b4f\u0003\u0002\u0002\u0002\u0b51\u0121\u0003\u0002\u0002\u0002\u0b52",
    "\u0b53\u0007\u0102\u0002\u0002\u0b53\u0b56\u0005\u0146\u00a4\u0002\u0b54",
    "\u0b55\u0007\"\u0002\u0002\u0b55\u0b57\u0007\u0104\u0002\u0002\u0b56",
    "\u0b54\u0003\u0002\u0002\u0002\u0b56\u0b57\u0003\u0002\u0002\u0002\u0b57",
    "\u0b59\u0003\u0002\u0002\u0002\u0b58\u0b5a\u00072\u0002\u0002\u0b59",
    "\u0b58\u0003\u0002\u0002\u0002\u0b59\u0b5a\u0003\u0002\u0002\u0002\u0b5a",
    "\u0b5d\u0003\u0002\u0002\u0002\u0b5b\u0b5c\u0007\"\u0002\u0002\u0b5c",
    "\u0b5e\u0007\u012b\u0002\u0002\u0b5d\u0b5b\u0003\u0002\u0002\u0002\u0b5d",
    "\u0b5e\u0003\u0002\u0002\u0002\u0b5e\u0b5f\u0003\u0002\u0002\u0002\u0b5f",
    "\u0b64\u0005\u0124\u0093\u0002\u0b60\u0b61\u0007\u01ae\u0002\u0002\u0b61",
    "\u0b63\u0005\u0124\u0093\u0002\u0b62\u0b60\u0003\u0002\u0002\u0002\u0b63",
    "\u0b66\u0003\u0002\u0002\u0002\u0b64\u0b62\u0003\u0002\u0002\u0002\u0b64",
    "\u0b65\u0003\u0002\u0002\u0002\u0b65\u0123\u0003\u0002\u0002\u0002\u0b66",
    "\u0b64\u0003\u0002\u0002\u0002\u0b67\u0b68\u0007\u01ac\u0002\u0002\u0b68",
    "\u0b69\u0007\u0132\u0002\u0002\u0b69\u0b6c\u0007\u019b\u0002\u0002\u0b6a",
    "\u0b6d\u0005\u0146\u00a4\u0002\u0b6b\u0b6d\u0007\u0197\u0002\u0002\u0b6c",
    "\u0b6a\u0003\u0002\u0002\u0002\u0b6c\u0b6b\u0003\u0002\u0002\u0002\u0b6d",
    "\u0b6f\u0003\u0002\u0002\u0002\u0b6e\u0b70\u0007\u01ae\u0002\u0002\u0b6f",
    "\u0b6e\u0003\u0002\u0002\u0002\u0b6f\u0b70\u0003\u0002\u0002\u0002\u0b70",
    "\u0b71\u0003\u0002\u0002\u0002\u0b71\u0b72\u0007G\u0002\u0002\u0b72",
    "\u0b73\u0007\u019b\u0002\u0002\u0b73\u0b75\u0007\u0197\u0002\u0002\u0b74",
    "\u0b76\u0007\u01ae\u0002\u0002\u0b75\u0b74\u0003\u0002\u0002\u0002\u0b75",
    "\u0b76\u0003\u0002\u0002\u0002\u0b76\u0b7d\u0003\u0002\u0002\u0002\u0b77",
    "\u0b78\u0007\u016c\u0002\u0002\u0b78\u0b79\u0007\u019b\u0002\u0002\u0b79",
    "\u0b7b\u0005\u014e\u00a8\u0002\u0b7a\u0b7c\u0007\u01ae\u0002\u0002\u0b7b",
    "\u0b7a\u0003\u0002\u0002\u0002\u0b7b\u0b7c\u0003\u0002\u0002\u0002\u0b7c",
    "\u0b7e\u0003\u0002\u0002\u0002\u0b7d\u0b77\u0003\u0002\u0002\u0002\u0b7d",
    "\u0b7e\u0003\u0002\u0002\u0002\u0b7e\u0b88\u0003\u0002\u0002\u0002\u0b7f",
    "\u0b80\u0007\u0129\u0002\u0002\u0b80\u0b83\u0007\u019b\u0002\u0002\u0b81",
    "\u0b84\u0005\u014e\u00a8\u0002\u0b82\u0b84\u0007\u0185\u0002\u0002\u0b83",
    "\u0b81\u0003\u0002\u0002\u0002\u0b83\u0b82\u0003\u0002\u0002\u0002\u0b84",
    "\u0b86\u0003\u0002\u0002\u0002\u0b85\u0b87\u0007\u01ae\u0002\u0002\u0b86",
    "\u0b85\u0003\u0002\u0002\u0002\u0b86\u0b87\u0003\u0002\u0002\u0002\u0b87",
    "\u0b89\u0003\u0002\u0002\u0002\u0b88\u0b7f\u0003\u0002\u0002\u0002\u0b88",
    "\u0b89\u0003\u0002\u0002\u0002\u0b89\u0b90\u0003\u0002\u0002\u0002\u0b8a",
    "\u0b8b\u0007\u0103\u0002\u0002\u0b8b\u0b8c\u0007\u019b\u0002\u0002\u0b8c",
    "\u0b8e\u0005\u014e\u00a8\u0002\u0b8d\u0b8f\u0007\u01ae\u0002\u0002\u0b8e",
    "\u0b8d\u0003\u0002\u0002\u0002\u0b8e\u0b8f\u0003\u0002\u0002\u0002\u0b8f",
    "\u0b91\u0003\u0002\u0002\u0002\u0b90\u0b8a\u0003\u0002\u0002\u0002\u0b90",
    "\u0b91\u0003\u0002\u0002\u0002\u0b91\u0b92\u0003\u0002\u0002\u0002\u0b92",
    "\u0b93\u0007\u01ad\u0002\u0002\u0b93\u0125\u0003\u0002\u0002\u0002\u0b94",
    "\u0b95\u0005\u0146\u00a4\u0002\u0b95\u0b96\u0007\u01a7\u0002\u0002\u0b96",
    "\u0b97\u0005\u0146\u00a4\u0002\u0b97\u0b98\u0007\u01a7\u0002\u0002\u0b98",
    "\u0b99\u0005\u0146\u00a4\u0002\u0b99\u0b9a\u0007\u01a7\u0002\u0002\u0b9a",
    "\u0ba6\u0003\u0002\u0002\u0002\u0b9b\u0b9c\u0005\u0146\u00a4\u0002\u0b9c",
    "\u0b9e\u0007\u01a7\u0002\u0002\u0b9d\u0b9f\u0005\u0146\u00a4\u0002\u0b9e",
    "\u0b9d\u0003\u0002\u0002\u0002\u0b9e\u0b9f\u0003\u0002\u0002\u0002\u0b9f",
    "\u0ba0\u0003\u0002\u0002\u0002\u0ba0\u0ba1\u0007\u01a7\u0002\u0002\u0ba1",
    "\u0ba6\u0003\u0002\u0002\u0002\u0ba2\u0ba3\u0005\u0146\u00a4\u0002\u0ba3",
    "\u0ba4\u0007\u01a7\u0002\u0002\u0ba4\u0ba6\u0003\u0002\u0002\u0002\u0ba5",
    "\u0b94\u0003\u0002\u0002\u0002\u0ba5\u0b9b\u0003\u0002\u0002\u0002\u0ba5",
    "\u0ba2\u0003\u0002\u0002\u0002\u0ba5\u0ba6\u0003\u0002\u0002\u0002\u0ba6",
    "\u0ba7\u0003\u0002\u0002\u0002\u0ba7\u0ba8\u0005\u0146\u00a4\u0002\u0ba8",
    "\u0127\u0003\u0002\u0002\u0002\u0ba9\u0baa\u0005\u0146\u00a4\u0002\u0baa",
    "\u0bac\u0007\u01a7\u0002\u0002\u0bab\u0bad\u0005\u0146\u00a4\u0002\u0bac",
    "\u0bab\u0003\u0002\u0002\u0002\u0bac\u0bad\u0003\u0002\u0002\u0002\u0bad",
    "\u0bae\u0003\u0002\u0002\u0002\u0bae\u0baf\u0007\u01a7\u0002\u0002\u0baf",
    "\u0bb4\u0003\u0002\u0002\u0002\u0bb0\u0bb1\u0005\u0146\u00a4\u0002\u0bb1",
    "\u0bb2\u0007\u01a7\u0002\u0002\u0bb2\u0bb4\u0003\u0002\u0002\u0002\u0bb3",
    "\u0ba9\u0003\u0002\u0002\u0002\u0bb3\u0bb0\u0003\u0002\u0002\u0002\u0bb3",
    "\u0bb4\u0003\u0002\u0002\u0002\u0bb4\u0bb5\u0003\u0002\u0002\u0002\u0bb5",
    "\u0bb6\u0005\u0146\u00a4\u0002\u0bb6\u0129\u0003\u0002\u0002\u0002\u0bb7",
    "\u0bb8\u0005\u0146\u00a4\u0002\u0bb8\u0bb9\u0007\u01a7\u0002\u0002\u0bb9",
    "\u0bbb\u0003\u0002\u0002\u0002\u0bba\u0bb7\u0003\u0002\u0002\u0002\u0bba",
    "\u0bbb\u0003\u0002\u0002\u0002\u0bbb\u0bbc\u0003\u0002\u0002\u0002\u0bbc",
    "\u0bbd\u0005\u0146\u00a4\u0002\u0bbd\u012b\u0003\u0002\u0002\u0002\u0bbe",
    "\u0bbf\u0005\u0146\u00a4\u0002\u0bbf\u0bc1\u0007\u01a7\u0002\u0002\u0bc0",
    "\u0bc2\u0005\u0146\u00a4\u0002\u0bc1\u0bc0\u0003\u0002\u0002\u0002\u0bc1",
    "\u0bc2\u0003\u0002\u0002\u0002\u0bc2\u0bc3\u0003\u0002\u0002\u0002\u0bc3",
    "\u0bc4\u0007\u01a7\u0002\u0002\u0bc4\u0bc9\u0003\u0002\u0002\u0002\u0bc5",
    "\u0bc6\u0005\u0146\u00a4\u0002\u0bc6\u0bc7\u0007\u01a7\u0002\u0002\u0bc7",
    "\u0bc9\u0003\u0002\u0002\u0002\u0bc8\u0bbe\u0003\u0002\u0002\u0002\u0bc8",
    "\u0bc5\u0003\u0002\u0002\u0002\u0bc8\u0bc9\u0003\u0002\u0002\u0002\u0bc9",
    "\u0bca\u0003\u0002\u0002\u0002\u0bca\u0bcb\u0005\u0146\u00a4\u0002\u0bcb",
    "\u012d\u0003\u0002\u0002\u0002\u0bcc\u0bcf\u0005\u0126\u0094\u0002\u0bcd",
    "\u0bcf\u0007\u0194\u0002\u0002\u0bce\u0bcc\u0003\u0002\u0002\u0002\u0bce",
    "\u0bcd\u0003\u0002\u0002\u0002\u0bcf\u012f\u0003\u0002\u0002\u0002\u0bd0",
    "\u0bd1\u0005\u0128\u0095\u0002\u0bd1\u0bd2\u0007\u01a7\u0002\u0002\u0bd2",
    "\u0bd4\u0003\u0002\u0002\u0002\u0bd3\u0bd0\u0003\u0002\u0002\u0002\u0bd3",
    "\u0bd4\u0003\u0002\u0002\u0002\u0bd4\u0bd5\u0003\u0002\u0002\u0002\u0bd5",
    "\u0bd6\u0005\u0146\u00a4\u0002\u0bd6\u0131\u0003\u0002\u0002\u0002\u0bd7",
    "\u0bdc\u0005\u0146\u00a4\u0002\u0bd8\u0bd9\u0007\u01ae\u0002\u0002\u0bd9",
    "\u0bdb\u0005\u0146\u00a4\u0002\u0bda\u0bd8\u0003\u0002\u0002\u0002\u0bdb",
    "\u0bde\u0003\u0002\u0002\u0002\u0bdc\u0bda\u0003\u0002\u0002\u0002\u0bdc",
    "\u0bdd\u0003\u0002\u0002\u0002\u0bdd\u0133\u0003\u0002\u0002\u0002\u0bde",
    "\u0bdc\u0003\u0002\u0002\u0002\u0bdf\u0be2\u0005\u0146\u00a4\u0002\u0be0",
    "\u0be2\u0007\u0194\u0002\u0002\u0be1\u0bdf\u0003\u0002\u0002\u0002\u0be1",
    "\u0be0\u0003\u0002\u0002\u0002\u0be2\u0135\u0003\u0002\u0002\u0002\u0be3",
    "\u0be4\t\r\u0002\u0002\u0be4\u0137\u0003\u0002\u0002\u0002\u0be5\u0be6",
    "\t5\u0002\u0002\u0be6\u0139\u0003\u0002\u0002\u0002\u0be7\u0be9\u0007",
    "m\u0002\u0002\u0be8\u0be7\u0003\u0002\u0002\u0002\u0be8\u0be9\u0003",
    "\u0002\u0002\u0002\u0be9\u0bea\u0003\u0002\u0002\u0002\u0bea\u0beb\u0007",
    "n\u0002\u0002\u0beb\u013b\u0003\u0002\u0002\u0002\u0bec\u0bf2\u0005",
    "\u012c\u0097\u0002\u0bed\u0bf2\u0007\u0093\u0002\u0002\u0bee\u0bf2\u0007",
    "c\u0002\u0002\u0bef\u0bf2\u0007\u00d6\u0002\u0002\u0bf0\u0bf2\u0007",
    "\u00dd\u0002\u0002\u0bf1\u0bec\u0003\u0002\u0002\u0002\u0bf1\u0bed\u0003",
    "\u0002\u0002\u0002\u0bf1\u0bee\u0003\u0002\u0002\u0002\u0bf1\u0bef\u0003",
    "\u0002\u0002\u0002\u0bf1\u0bf0\u0003\u0002\u0002\u0002\u0bf2\u013d\u0003",
    "\u0002\u0002\u0002\u0bf3\u0bf5\u0005\u0146\u00a4\u0002\u0bf4\u0bf6\u0007",
    "U\u0002\u0002\u0bf5\u0bf4\u0003\u0002\u0002\u0002\u0bf5\u0bf6\u0003",
    "\u0002\u0002\u0002\u0bf6\u0bfe\u0003\u0002\u0002\u0002\u0bf7\u0bf8\u0007",
    "\u01ac\u0002\u0002\u0bf8\u0bfb\t6\u0002\u0002\u0bf9\u0bfa\u0007\u01ae",
    "\u0002\u0002\u0bfa\u0bfc\u0007\u0195\u0002\u0002\u0bfb\u0bf9\u0003\u0002",
    "\u0002\u0002\u0bfb\u0bfc\u0003\u0002\u0002\u0002\u0bfc\u0bfd\u0003\u0002",
    "\u0002\u0002\u0bfd\u0bff\u0007\u01ad\u0002\u0002\u0bfe\u0bf7\u0003\u0002",
    "\u0002\u0002\u0bfe\u0bff\u0003\u0002\u0002\u0002\u0bff\u013f\u0003\u0002",
    "\u0002\u0002\u0c00\u0c03\u0007n\u0002\u0002\u0c01\u0c03\u0005\u0142",
    "\u00a2\u0002\u0c02\u0c00\u0003\u0002\u0002\u0002\u0c02\u0c01\u0003\u0002",
    "\u0002\u0002\u0c03\u0141\u0003\u0002\u0002\u0002\u0c04\u0c14\u0007\u0197",
    "\u0002\u0002\u0c05\u0c14\u0007\u0198\u0002\u0002\u0c06\u0c08\u0005\u0144",
    "\u00a3\u0002\u0c07\u0c06\u0003\u0002\u0002\u0002\u0c07\u0c08\u0003\u0002",
    "\u0002\u0002\u0c08\u0c09\u0003\u0002\u0002\u0002\u0c09\u0c14\u0007\u0195",
    "\u0002\u0002\u0c0a\u0c0c\u0005\u0144\u00a3\u0002\u0c0b\u0c0a\u0003\u0002",
    "\u0002\u0002\u0c0b\u0c0c\u0003\u0002\u0002\u0002\u0c0c\u0c0d\u0003\u0002",
    "\u0002\u0002\u0c0d\u0c14\t7\u0002\u0002\u0c0e\u0c10\u0005\u0144\u00a3",
    "\u0002\u0c0f\u0c0e\u0003\u0002\u0002\u0002\u0c0f\u0c10\u0003\u0002\u0002",
    "\u0002\u0c10\u0c11\u0003\u0002\u0002\u0002\u0c11\u0c12\u0007\u01ab\u0002",
    "\u0002\u0c12\u0c14\t8\u0002\u0002\u0c13\u0c04\u0003\u0002\u0002\u0002",
    "\u0c13\u0c05\u0003\u0002\u0002\u0002\u0c13\u0c07\u0003\u0002\u0002\u0002",
    "\u0c13\u0c0b\u0003\u0002\u0002\u0002\u0c13\u0c0f\u0003\u0002\u0002\u0002",
    "\u0c14\u0143\u0003\u0002\u0002\u0002\u0c15\u0c16\t!\u0002\u0002\u0c16",
    "\u0145\u0003\u0002\u0002\u0002\u0c17\u0c1b\u0005\u0148\u00a5\u0002\u0c18",
    "\u0c1b\u0007\u0192\u0002\u0002\u0c19\u0c1b\u0007\u0193\u0002\u0002\u0c1a",
    "\u0c17\u0003\u0002\u0002\u0002\u0c1a\u0c18\u0003\u0002\u0002\u0002\u0c1a",
    "\u0c19\u0003\u0002\u0002\u0002\u0c1b\u0147\u0003\u0002\u0002\u0002\u0c1c",
    "\u0c1d\t9\u0002\u0002\u0c1d\u0149\u0003\u0002\u0002\u0002\u0c1e\u0c2e",
    "\u0007\u019b\u0002\u0002\u0c1f\u0c2e\u0007\u019c\u0002\u0002\u0c20\u0c2e",
    "\u0007\u019d\u0002\u0002\u0c21\u0c22\u0007\u019d\u0002\u0002\u0c22\u0c2e",
    "\u0007\u019b\u0002\u0002\u0c23\u0c24\u0007\u019c\u0002\u0002\u0c24\u0c2e",
    "\u0007\u019b\u0002\u0002\u0c25\u0c26\u0007\u019d\u0002\u0002\u0c26\u0c2e",
    "\u0007\u019c\u0002\u0002\u0c27\u0c28\u0007\u019e\u0002\u0002\u0c28\u0c2e",
    "\u0007\u019b\u0002\u0002\u0c29\u0c2a\u0007\u019e\u0002\u0002\u0c2a\u0c2e",
    "\u0007\u019c\u0002\u0002\u0c2b\u0c2c\u0007\u019e\u0002\u0002\u0c2c\u0c2e",
    "\u0007\u019d\u0002\u0002\u0c2d\u0c1e\u0003\u0002\u0002\u0002\u0c2d\u0c1f",
    "\u0003\u0002\u0002\u0002\u0c2d\u0c20\u0003\u0002\u0002\u0002\u0c2d\u0c21",
    "\u0003\u0002\u0002\u0002\u0c2d\u0c23\u0003\u0002\u0002\u0002\u0c2d\u0c25",
    "\u0003\u0002\u0002\u0002\u0c2d\u0c27\u0003\u0002\u0002\u0002\u0c2d\u0c29",
    "\u0003\u0002\u0002\u0002\u0c2d\u0c2b\u0003\u0002\u0002\u0002\u0c2e\u014b",
    "\u0003\u0002\u0002\u0002\u0c2f\u0c30\t:\u0002\u0002\u0c30\u014d\u0003",
    "\u0002\u0002\u0002\u0c31\u0c33\u0007\u0195\u0002\u0002\u0c32\u0c34\t",
    ";\u0002\u0002\u0c33\u0c32\u0003\u0002\u0002\u0002\u0c33\u0c34\u0003",
    "\u0002\u0002\u0002\u0c34\u014f\u0003\u0002\u0002\u0002\u01ce\u0153\u015a",
    "\u015e\u0162\u0168\u016e\u017f\u0183\u0186\u018a\u018e\u0192\u0197\u019c",
    "\u01a3\u01a6\u01aa\u01ad\u01b5\u01b8\u01bd\u01c0\u01c5\u01ca\u01cd\u01d2",
    "\u01d8\u01df\u01e3\u01e5\u01ea\u01f7\u01fc\u01fe\u0207\u020a\u0212\u0214",
    "\u0217\u021b\u021e\u0222\u0229\u022d\u022f\u0231\u0234\u0237\u023a\u0240",
    "\u0243\u024b\u024d\u0250\u0254\u0257\u025d\u0260\u0264\u0267\u026a\u0271",
    "\u0274\u0278\u027b\u027e\u0281\u0284\u028c\u028e\u0292\u0295\u029d\u02a1",
    "\u02a5\u02ac\u02b0\u02b2\u02b4\u02b7\u02ba\u02bd\u02c5\u02cb\u02d1\u02d3",
    "\u02d7\u02da\u02dd\u02e2\u02e7\u02ea\u02f2\u02f6\u02fd\u0300\u0309\u030c",
    "\u0310\u0318\u031b\u031f\u0322\u032b\u032f\u0333\u0336\u033d\u0340\u0347",
    "\u034b\u034d\u0355\u0358\u035c\u0365\u0368\u036c\u0370\u0373\u0378\u0388",
    "\u038c\u0392\u0394\u0397\u039f\u03a5\u03aa\u03ad\u03b6\u03be\u03c1\u03c8",
    "\u03cb\u03f0\u03f3\u03f9\u0405\u0407\u040a\u0422\u042d\u0435\u0440\u0445",
    "\u0448\u0450\u045a\u0474\u047a\u0485\u0493\u049b\u04a2\u04b9\u04c6\u04cc",
    "\u04d1\u04d4\u04da\u04de\u04e5\u04ee\u04f2\u04f8\u04ff\u0503\u0510\u0516",
    "\u0527\u052b\u0533\u0537\u053f\u0543\u0545\u0549\u054d\u0551\u0555\u055b",
    "\u055f\u0561\u0566\u056e\u0571\u0574\u057d\u0582\u0587\u058a\u058c\u0590",
    "\u0594\u0597\u059b\u05a1\u05a6\u05ad\u05af\u05b3\u05ba\u05be\u05c1\u05ca",
    "\u05cd\u05cf\u05d8\u05e3\u05e7\u05e9\u05eb\u05f1\u05f6\u05fd\u060a\u060c",
    "\u060e\u0611\u0614\u061b\u061e\u0624\u0629\u062b\u062e\u0634\u063c\u063e",
    "\u0641\u0645\u0648\u064e\u0651\u0655\u0658\u065e\u0661\u0663\u0667\u066c",
    "\u0674\u0679\u0682\u0687\u068c\u0692\u0696\u0699\u069d\u06a3\u06ab\u06b0",
    "\u06b2\u06b5\u06ba\u06bf\u06c2\u06c7\u06ca\u06cd\u06d3\u06d9\u06dd\u06e2",
    "\u06e5\u06ea\u06ee\u06f2\u06f8\u06fe\u0707\u0711\u071b\u071d\u071f\u0722",
    "\u0725\u0730\u0732\u0734\u0737\u073a\u073d\u0740\u0743\u0746\u0752\u0755",
    "\u0758\u0761\u0764\u0767\u076e\u0771\u077f\u0782\u0789\u0794\u0798\u07a5",
    "\u07a9\u07b1\u07b5\u07c7\u07d6\u07d8\u07e3\u07ea\u07f1\u07f9\u0802\u0806",
    "\u0810\u0817\u0823\u0825\u083c\u0845\u084b\u0851\u0857\u0862\u0869\u086e",
    "\u0873\u0877\u0880\u0882\u0886\u0889\u088e\u0892\u0896\u089f\u08a2\u08a6",
    "\u08ab\u08af\u08b8\u08c4\u08c6\u08ce\u08d6\u08d9\u08db\u08e2\u08e6\u08f1",
    "\u0913\u0923\u0929\u0930\u0936\u093b\u0943\u0946\u0948\u094f\u0957\u095d",
    "\u0962\u0966\u096b\u096d\u0974\u0978\u097f\u0981\u0983\u098e\u0992\u0994",
    "\u0997\u09a7\u09ab\u09bf\u09c3\u09c7\u09d2\u09d9\u09ef\u0a23\u0a27\u0a35",
    "\u0a42\u0a48\u0a4b\u0a53\u0a5f\u0a65\u0a6e\u0a7f\u0a85\u0a8d\u0a91\u0a99",
    "\u0aa0\u0aaf\u0ab7\u0ac4\u0ac9\u0ace\u0ad4\u0ad7\u0adb\u0ae0\u0aef\u0af8",
    "\u0afb\u0afe\u0b0b\u0b0f\u0b17\u0b1d\u0b25\u0b2c\u0b32\u0b41\u0b4a\u0b50",
    "\u0b56\u0b59\u0b5d\u0b64\u0b6c\u0b6f\u0b75\u0b7b\u0b7d\u0b83\u0b86\u0b88",
    "\u0b8e\u0b90\u0b9e\u0ba5\u0bac\u0bb3\u0bba\u0bc1\u0bc8\u0bce\u0bd3\u0bdc",
    "\u0be1\u0be8\u0bf1\u0bf5\u0bfb\u0bfe\u0c02\u0c07\u0c0b\u0c0f\u0c13\u0c1a",
    "\u0c2d\u0c33"].join("");


var atn = new antlr4.atn.ATNDeserializer().deserialize(serializedATN);

var decisionsToDFA = atn.decisionToState.map( function(ds, index) { return new antlr4.dfa.DFA(ds, index); });

var sharedContextCache = new antlr4.PredictionContextCache();

var literalNames = [ null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, null, null, null, null, null, 
                     null, null, null, null, "'='", "'>'", "'<'", "'!'", 
                     "'+='", "'-='", "'*='", "'/='", "'%='", "'&='", "'^='", 
                     "'|='", "'.'", "'_'", "'@'", "'#'", "'$'", "'('", "')'", 
                     "','", "';'", "':'", "'*'", "'/'", "'%'", "'+'", "'-'", 
                     "'~'", "'|'", "'&'", "'^'" ];

var symbolicNames = [ null, "HADR_options", "ADD", "ALL", "ALTER", "AND", 
                      "ANY", "AS", "ASC", "AUTHORIZATION", "BACKUP", "BEGIN", 
                      "BETWEEN", "BREAK", "BROWSE", "BULK", "BY", "CASCADE", 
                      "CASE", "CHANGETABLE", "CHANGES", "CHECK", "CHECKPOINT", 
                      "CLOSE", "CLUSTERED", "COALESCE", "COLLATE", "COLUMN", 
                      "COMMIT", "COMPUTE", "CONSTRAINT", "CONTAINMENT", 
                      "CONTAINS", "CONTAINSTABLE", "CONTINUE", "CONVERT", 
                      "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", 
                      "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATABASE", 
                      "DBCC", "DEALLOCATE", "DECLARE", "DEFAULT", "DELETE", 
                      "DENY", "DESC", "DISK", "DISTINCT", "DISTRIBUTED", 
                      "DOUBLE", "DROP", "DUMP", "ELSE", "END", "ERRLVL", 
                      "ESCAPE", "EXCEPT", "EXECUTE", "EXISTS", "EXIT", "EXTERNAL", 
                      "FETCH", "FILE", "FILENAME", "FILLFACTOR", "FOR", 
                      "FORCESEEK", "FOREIGN", "FREETEXT", "FREETEXTTABLE", 
                      "FROM", "FULL", "FUNCTION", "GOTO", "GRANT", "GROUP", 
                      "HAVING", "IDENTITY", "IDENTITYCOL", "IDENTITY_INSERT", 
                      "IF", "IN", "INDEX", "INNER", "INSERT", "INTERSECT", 
                      "INTO", "IS", "JOIN", "KEY", "KILL", "LEFT", "LIKE", 
                      "LINENO", "LOAD", "LOG", "MERGE", "NATIONAL", "NOCHECK", 
                      "NONCLUSTERED", "NONE", "NOT", "NULL", "NULLIF", "OF", 
                      "OFF", "OFFSETS", "ON", "OPEN", "OPENDATASOURCE", 
                      "OPENQUERY", "OPENROWSET", "OPENXML", "OPTION", "OR", 
                      "ORDER", "OUTER", "OVER", "PARTIAL", "PERCENT", "PIVOT", 
                      "PLAN", "PRECISION", "PRIMARY", "PRINT", "PROC", "PROCEDURE", 
                      "PUBLIC", "RAISERROR", "READ", "READTEXT", "RECONFIGURE", 
                      "REFERENCES", "REPLICATION", "RESTORE", "RESTRICT", 
                      "RETURN", "REVERT", "REVOKE", "RIGHT", "ROLLBACK", 
                      "ROWCOUNT", "ROWGUIDCOL", "RULE", "SAVE", "SCHEMA", 
                      "SECURITYAUDIT", "SELECT", "SEMANTICKEYPHRASETABLE", 
                      "SEMANTICSIMILARITYDETAILSTABLE", "SEMANTICSIMILARITYTABLE", 
                      "SESSION_USER", "SET", "SETUSER", "SHUTDOWN", "SOME", 
                      "STATISTICS", "SYSTEM_USER", "TABLE", "TABLESAMPLE", 
                      "TEXTSIZE", "THEN", "TO", "TOP", "TRAN", "TRANSACTION", 
                      "TRIGGER", "TRUNCATE", "TRY_CONVERT", "TSEQUAL", "UNION", 
                      "UNIQUE", "UNPIVOT", "UPDATE", "UPDATETEXT", "USE", 
                      "USER", "VALUES", "VARYING", "VIEW", "WAITFOR", "WHEN", 
                      "WHERE", "WHILE", "WITH", "WITHIN", "WRITETEXT", "ABSOLUTE", 
                      "AFTER", "ALLOWED", "ALLOW_SNAPSHOT_ISOLATION", "ANSI_NULLS", 
                      "ANSI_NULL_DEFAULT", "ANSI_PADDING", "ANSI_WARNINGS", 
                      "APPLY", "ARITHABORT", "AUTO", "AUTO_CLEANUP", "AUTO_CLOSE", 
                      "AUTO_CREATE_STATISTICS", "AUTO_SHRINK", "AUTO_UPDATE_STATISTICS", 
                      "AUTO_UPDATE_STATISTICS_ASYNC", "AVG", "BASE64", "BINARY_CHECKSUM", 
                      "BULK_LOGGED", "CALLER", "CAST", "CATCH", "CHANGE_RETENTION", 
                      "CHANGE_TRACKING", "CHECKSUM", "CHECKSUM_AGG", "COMMITTED", 
                      "COMPATIBILITY_LEVEL", "CONCAT", "CONCAT_NULL_YIELDS_NULL", 
                      "CONTROL", "COOKIE", "COUNT", "COUNT_BIG", "CURSOR_CLOSE_ON_COMMIT", 
                      "CURSOR_DEFAULT", "DATEADD", "DATEDIFF", "DATENAME", 
                      "DATEPART", "DATE_CORRELATION_OPTIMIZATION", "DAYS", 
                      "DB_CHAINING", "DEFAULT_FULLTEXT_LANGUAGE", "DEFAULT_LANGUAGE", 
                      "DELAY", "DELAYED_DURABILITY", "DELETED", "DENSE_RANK", 
                      "DIRECTORY_NAME", "DISABLE", "DISABLED", "DISABLE_BROKER", 
                      "DYNAMIC", "EMERGENCY", "ENABLE_BROKER", "ENCRYPTION", 
                      "ERROR_BROKER_CONVERSATIONS", "EXPAND", "FAST", "FAST_FORWARD", 
                      "FILEGROUP", "FILEGROWTH", "FILESTREAM", "FIRST", 
                      "FOLLOWING", "FORCE", "FORCED", "FORWARD_ONLY", "FULLSCAN", 
                      "GB", "GLOBAL", "GO", "GROUPING", "GROUPING_ID", "HADR", 
                      "HASH", "HONOR_BROKER_PRIORITY", "HOURS", "IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX", 
                      "IMMEDIATE", "IMPERSONATE", "INCREMENTAL", "INSENSITIVE", 
                      "INSERTED", "ISOLATION", "KB", "KEEP", "KEEPFIXED", 
                      "KEYSET", "LAST", "LEVEL", "LOCAL", "LOCK_ESCALATION", 
                      "LOGIN", "LOOP", "MARK", "MAX", "MAXDOP", "MAXRECURSION", 
                      "MAXSIZE", "MB", "MEMORY_OPTIMIZED_DATA", "MIN", "MINUTES", 
                      "MIN_ACTIVE_ROWVERSION", "MIXED_PAGE_ALLOCATION", 
                      "MODIFY", "MULTI_USER", "NAME", "NESTED_TRIGGERS", 
                      "NEW_BROKER", "NEXT", "NOCOUNT", "NOEXPAND", "NON_TRANSACTED_ACCESS", 
                      "NORECOMPUTE", "NO_WAIT", "NTILE", "NUMBER", "NUMERIC_ROUNDABORT", 
                      "OFFLINE", "OFFSET", "ONLINE", "ONLY", "OPTIMISTIC", 
                      "OPTIMIZE", "OUT", "OUTPUT", "OWNER", "PAGE_VERIFY", 
                      "PARAMETERIZATION", "PARTITION", "PATH", "PRECEDING", 
                      "PRIOR", "PRIVILEGES", "QUOTED_IDENTIFIER", "RANGE", 
                      "RANK", "READONLY", "READ_COMMITTED_SNAPSHOT", "READ_ONLY", 
                      "READ_WRITE", "RECOMPILE", "RECOVERY", "RECURSIVE_TRIGGERS", 
                      "RELATIVE", "REMOTE", "REPEATABLE", "RESTRICTED_USER", 
                      "ROBUST", "ROOT", "ROW", "ROWGUID", "ROWS", "ROW_NUMBER", 
                      "SAMPLE", "SCHEMABINDING", "SCROLL", "SCROLL_LOCKS", 
                      "SECONDS", "SELF", "SERIALIZABLE", "SHOWPLAN", "SIMPLE", 
                      "SINGLE_USER", "SIZE", "SNAPSHOT", "SPATIAL_WINDOW_MAX_CELLS", 
                      "STATIC", "STATS_STREAM", "STDEV", "STDEVP", "SUM", 
                      "TAKE", "TARGET_RECOVERY_TIME", "TB", "TEXTIMAGE_ON", 
                      "THROW", "TIES", "TIME", "TORN_PAGE_DETECTION", "TRANSFORM_NOISE_WORDS", 
                      "TRUSTWORTHY", "TRY", "TWO_DIGIT_YEAR_CUTOFF", "TYPE", 
                      "TYPE_WARNING", "UNBOUNDED", "UNCOMMITTED", "UNKNOWN", 
                      "UNLIMITED", "USING", "VAR", "VARP", "VIEWS", "VIEW_METADATA", 
                      "WORK", "XML", "XMLNAMESPACES", "DOLLAR_ACTION", "SPACE", 
                      "COMMENT", "LINE_COMMENT", "DOUBLE_QUOTE_ID", "SQUARE_BRACKET_ID", 
                      "LOCAL_ID", "DECIMAL", "ID", "STRING", "BINARY", "FLOAT", 
                      "REAL", "EQUAL", "GREATER", "LESS", "EXCLAMATION", 
                      "PLUS_ASSIGN", "MINUS_ASSIGN", "MULT_ASSIGN", "DIV_ASSIGN", 
                      "MOD_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", 
                      "DOT", "UNDERLINE", "AT", "SHARP", "DOLLAR", "LR_BRACKET", 
                      "RR_BRACKET", "COMMA", "SEMI", "COLON", "STAR", "DIVIDE", 
                      "MODULE", "PLUS", "MINUS", "BIT_NOT", "BIT_OR", "BIT_AND", 
                      "BIT_XOR" ];

var ruleNames =  [ "tsql_file", "batch", "sql_clauses", "sql_clause", "dml_clause", 
                   "ddl_clause", "cfl_statement", "another_statement", "delete_statement", 
                   "delete_statement_from", "insert_statement", "insert_statement_value", 
                   "select_statement", "update_statement", "output_clause", 
                   "output_dml_list_elem", "output_column_name", "create_database", 
                   "create_index", "create_procedure", "procedure_param", 
                   "procedure_option", "create_statistics", "create_table", 
                   "create_view", "view_attribute", "alter_table", "alter_database", 
                   "database_optionspec", "auto_option", "change_tracking_option", 
                   "change_tracking_option_list", "containment_option", 
                   "cursor_option", "date_correlation_optimization_option", 
                   "db_encryption_option", "db_state_option", "db_update_option", 
                   "db_user_access_option", "delayed_durability_option", 
                   "external_access_option", "mixed_page_allocation_option", 
                   "parameterization_option", "recovery_option", "service_broker_option", 
                   "snapshot_option", "sql_option", "target_recovery_time_option", 
                   "termination", "drop_index", "drop_procedure", "drop_statistics", 
                   "drop_table", "drop_view", "create_type", "drop_type", 
                   "rowset_function_limited", "openquery", "opendatasource", 
                   "declare_statement", "cursor_statement", "execute_statement", 
                   "execute_statement_arg", "execute_var_string", "security_statement", 
                   "grant_permission", "set_statement", "transaction_statement", 
                   "go_statement", "use_statement", "execute_clause", "declare_local", 
                   "table_type_definition", "column_def_table_constraints", 
                   "column_def_table_constraint", "column_definition", "column_constraint", 
                   "table_constraint", "index_options", "index_option", 
                   "declare_cursor", "declare_set_cursor_common", "fetch_cursor", 
                   "set_special", "constant_LOCAL_ID", "expression", "constant_expression", 
                   "subquery", "with_expression", "common_table_expression", 
                   "update_elem", "search_condition_list", "search_condition", 
                   "predicate", "query_expression", "union", "query_specification", 
                   "top_clause", "order_by_clause", "for_clause", "xml_common_directives", 
                   "order_by_expression", "group_by_item", "option_clause", 
                   "option", "optimize_for_arg", "select_list", "select_list_elem", 
                   "table_sources", "table_source", "table_source_item_joined", 
                   "table_source_item", "change_table", "join_part", "table_name_with_hint", 
                   "rowset_function", "bulk_option", "derived_table", "function_call", 
                   "switch_section", "switch_search_condition_section", 
                   "as_table_alias", "table_alias", "with_table_hints", 
                   "insert_with_table_hints", "table_hint", "index_value", 
                   "column_alias_list", "column_alias", "a_star", "table_value_constructor", 
                   "expression_list", "ranking_windowed_function", "aggregate_windowed_function", 
                   "all_distinct", "over_clause", "row_or_range_clause", 
                   "window_frame_extent", "window_frame_bound", "window_frame_preceding", 
                   "window_frame_following", "create_database_option", "database_filestream_option", 
                   "database_file_spec", "file_group", "file_spec", "full_table_name", 
                   "table_name", "simple_name", "func_proc_name", "ddl_object", 
                   "full_column_name", "column_name_list", "cursor_name", 
                   "on_off", "clustered", "null_notnull", "scalar_function_name", 
                   "data_type", "default_value", "constant", "sign", "r_id", 
                   "simple_id", "comparison_operator", "assignment_operator", 
                   "file_size" ];

function tsqlParser (input) {
	antlr4.Parser.call(this, input);
    this._interp = new antlr4.atn.ParserATNSimulator(this, atn, decisionsToDFA, sharedContextCache);
    this.ruleNames = ruleNames;
    this.literalNames = literalNames;
    this.symbolicNames = symbolicNames;
    return this;
}

tsqlParser.prototype = Object.create(antlr4.Parser.prototype);
tsqlParser.prototype.constructor = tsqlParser;

Object.defineProperty(tsqlParser.prototype, "atn", {
	get : function() {
		return atn;
	}
});

tsqlParser.EOF = antlr4.Token.EOF;
tsqlParser.HADR_options = 1;
tsqlParser.ADD = 2;
tsqlParser.ALL = 3;
tsqlParser.ALTER = 4;
tsqlParser.AND = 5;
tsqlParser.ANY = 6;
tsqlParser.AS = 7;
tsqlParser.ASC = 8;
tsqlParser.AUTHORIZATION = 9;
tsqlParser.BACKUP = 10;
tsqlParser.BEGIN = 11;
tsqlParser.BETWEEN = 12;
tsqlParser.BREAK = 13;
tsqlParser.BROWSE = 14;
tsqlParser.BULK = 15;
tsqlParser.BY = 16;
tsqlParser.CASCADE = 17;
tsqlParser.CASE = 18;
tsqlParser.CHANGETABLE = 19;
tsqlParser.CHANGES = 20;
tsqlParser.CHECK = 21;
tsqlParser.CHECKPOINT = 22;
tsqlParser.CLOSE = 23;
tsqlParser.CLUSTERED = 24;
tsqlParser.COALESCE = 25;
tsqlParser.COLLATE = 26;
tsqlParser.COLUMN = 27;
tsqlParser.COMMIT = 28;
tsqlParser.COMPUTE = 29;
tsqlParser.CONSTRAINT = 30;
tsqlParser.CONTAINMENT = 31;
tsqlParser.CONTAINS = 32;
tsqlParser.CONTAINSTABLE = 33;
tsqlParser.CONTINUE = 34;
tsqlParser.CONVERT = 35;
tsqlParser.CREATE = 36;
tsqlParser.CROSS = 37;
tsqlParser.CURRENT = 38;
tsqlParser.CURRENT_DATE = 39;
tsqlParser.CURRENT_TIME = 40;
tsqlParser.CURRENT_TIMESTAMP = 41;
tsqlParser.CURRENT_USER = 42;
tsqlParser.CURSOR = 43;
tsqlParser.DATABASE = 44;
tsqlParser.DBCC = 45;
tsqlParser.DEALLOCATE = 46;
tsqlParser.DECLARE = 47;
tsqlParser.DEFAULT = 48;
tsqlParser.DELETE = 49;
tsqlParser.DENY = 50;
tsqlParser.DESC = 51;
tsqlParser.DISK = 52;
tsqlParser.DISTINCT = 53;
tsqlParser.DISTRIBUTED = 54;
tsqlParser.DOUBLE = 55;
tsqlParser.DROP = 56;
tsqlParser.DUMP = 57;
tsqlParser.ELSE = 58;
tsqlParser.END = 59;
tsqlParser.ERRLVL = 60;
tsqlParser.ESCAPE = 61;
tsqlParser.EXCEPT = 62;
tsqlParser.EXECUTE = 63;
tsqlParser.EXISTS = 64;
tsqlParser.EXIT = 65;
tsqlParser.EXTERNAL = 66;
tsqlParser.FETCH = 67;
tsqlParser.FILE = 68;
tsqlParser.FILENAME = 69;
tsqlParser.FILLFACTOR = 70;
tsqlParser.FOR = 71;
tsqlParser.FORCESEEK = 72;
tsqlParser.FOREIGN = 73;
tsqlParser.FREETEXT = 74;
tsqlParser.FREETEXTTABLE = 75;
tsqlParser.FROM = 76;
tsqlParser.FULL = 77;
tsqlParser.FUNCTION = 78;
tsqlParser.GOTO = 79;
tsqlParser.GRANT = 80;
tsqlParser.GROUP = 81;
tsqlParser.HAVING = 82;
tsqlParser.IDENTITY = 83;
tsqlParser.IDENTITYCOL = 84;
tsqlParser.IDENTITY_INSERT = 85;
tsqlParser.IF = 86;
tsqlParser.IN = 87;
tsqlParser.INDEX = 88;
tsqlParser.INNER = 89;
tsqlParser.INSERT = 90;
tsqlParser.INTERSECT = 91;
tsqlParser.INTO = 92;
tsqlParser.IS = 93;
tsqlParser.JOIN = 94;
tsqlParser.KEY = 95;
tsqlParser.KILL = 96;
tsqlParser.LEFT = 97;
tsqlParser.LIKE = 98;
tsqlParser.LINENO = 99;
tsqlParser.LOAD = 100;
tsqlParser.LOG = 101;
tsqlParser.MERGE = 102;
tsqlParser.NATIONAL = 103;
tsqlParser.NOCHECK = 104;
tsqlParser.NONCLUSTERED = 105;
tsqlParser.NONE = 106;
tsqlParser.NOT = 107;
tsqlParser.NULL = 108;
tsqlParser.NULLIF = 109;
tsqlParser.OF = 110;
tsqlParser.OFF = 111;
tsqlParser.OFFSETS = 112;
tsqlParser.ON = 113;
tsqlParser.OPEN = 114;
tsqlParser.OPENDATASOURCE = 115;
tsqlParser.OPENQUERY = 116;
tsqlParser.OPENROWSET = 117;
tsqlParser.OPENXML = 118;
tsqlParser.OPTION = 119;
tsqlParser.OR = 120;
tsqlParser.ORDER = 121;
tsqlParser.OUTER = 122;
tsqlParser.OVER = 123;
tsqlParser.PARTIAL = 124;
tsqlParser.PERCENT = 125;
tsqlParser.PIVOT = 126;
tsqlParser.PLAN = 127;
tsqlParser.PRECISION = 128;
tsqlParser.PRIMARY = 129;
tsqlParser.PRINT = 130;
tsqlParser.PROC = 131;
tsqlParser.PROCEDURE = 132;
tsqlParser.PUBLIC = 133;
tsqlParser.RAISERROR = 134;
tsqlParser.READ = 135;
tsqlParser.READTEXT = 136;
tsqlParser.RECONFIGURE = 137;
tsqlParser.REFERENCES = 138;
tsqlParser.REPLICATION = 139;
tsqlParser.RESTORE = 140;
tsqlParser.RESTRICT = 141;
tsqlParser.RETURN = 142;
tsqlParser.REVERT = 143;
tsqlParser.REVOKE = 144;
tsqlParser.RIGHT = 145;
tsqlParser.ROLLBACK = 146;
tsqlParser.ROWCOUNT = 147;
tsqlParser.ROWGUIDCOL = 148;
tsqlParser.RULE = 149;
tsqlParser.SAVE = 150;
tsqlParser.SCHEMA = 151;
tsqlParser.SECURITYAUDIT = 152;
tsqlParser.SELECT = 153;
tsqlParser.SEMANTICKEYPHRASETABLE = 154;
tsqlParser.SEMANTICSIMILARITYDETAILSTABLE = 155;
tsqlParser.SEMANTICSIMILARITYTABLE = 156;
tsqlParser.SESSION_USER = 157;
tsqlParser.SET = 158;
tsqlParser.SETUSER = 159;
tsqlParser.SHUTDOWN = 160;
tsqlParser.SOME = 161;
tsqlParser.STATISTICS = 162;
tsqlParser.SYSTEM_USER = 163;
tsqlParser.TABLE = 164;
tsqlParser.TABLESAMPLE = 165;
tsqlParser.TEXTSIZE = 166;
tsqlParser.THEN = 167;
tsqlParser.TO = 168;
tsqlParser.TOP = 169;
tsqlParser.TRAN = 170;
tsqlParser.TRANSACTION = 171;
tsqlParser.TRIGGER = 172;
tsqlParser.TRUNCATE = 173;
tsqlParser.TRY_CONVERT = 174;
tsqlParser.TSEQUAL = 175;
tsqlParser.UNION = 176;
tsqlParser.UNIQUE = 177;
tsqlParser.UNPIVOT = 178;
tsqlParser.UPDATE = 179;
tsqlParser.UPDATETEXT = 180;
tsqlParser.USE = 181;
tsqlParser.USER = 182;
tsqlParser.VALUES = 183;
tsqlParser.VARYING = 184;
tsqlParser.VIEW = 185;
tsqlParser.WAITFOR = 186;
tsqlParser.WHEN = 187;
tsqlParser.WHERE = 188;
tsqlParser.WHILE = 189;
tsqlParser.WITH = 190;
tsqlParser.WITHIN = 191;
tsqlParser.WRITETEXT = 192;
tsqlParser.ABSOLUTE = 193;
tsqlParser.AFTER = 194;
tsqlParser.ALLOWED = 195;
tsqlParser.ALLOW_SNAPSHOT_ISOLATION = 196;
tsqlParser.ANSI_NULLS = 197;
tsqlParser.ANSI_NULL_DEFAULT = 198;
tsqlParser.ANSI_PADDING = 199;
tsqlParser.ANSI_WARNINGS = 200;
tsqlParser.APPLY = 201;
tsqlParser.ARITHABORT = 202;
tsqlParser.AUTO = 203;
tsqlParser.AUTO_CLEANUP = 204;
tsqlParser.AUTO_CLOSE = 205;
tsqlParser.AUTO_CREATE_STATISTICS = 206;
tsqlParser.AUTO_SHRINK = 207;
tsqlParser.AUTO_UPDATE_STATISTICS = 208;
tsqlParser.AUTO_UPDATE_STATISTICS_ASYNC = 209;
tsqlParser.AVG = 210;
tsqlParser.BASE64 = 211;
tsqlParser.BINARY_CHECKSUM = 212;
tsqlParser.BULK_LOGGED = 213;
tsqlParser.CALLER = 214;
tsqlParser.CAST = 215;
tsqlParser.CATCH = 216;
tsqlParser.CHANGE_RETENTION = 217;
tsqlParser.CHANGE_TRACKING = 218;
tsqlParser.CHECKSUM = 219;
tsqlParser.CHECKSUM_AGG = 220;
tsqlParser.COMMITTED = 221;
tsqlParser.COMPATIBILITY_LEVEL = 222;
tsqlParser.CONCAT = 223;
tsqlParser.CONCAT_NULL_YIELDS_NULL = 224;
tsqlParser.CONTROL = 225;
tsqlParser.COOKIE = 226;
tsqlParser.COUNT = 227;
tsqlParser.COUNT_BIG = 228;
tsqlParser.CURSOR_CLOSE_ON_COMMIT = 229;
tsqlParser.CURSOR_DEFAULT = 230;
tsqlParser.DATEADD = 231;
tsqlParser.DATEDIFF = 232;
tsqlParser.DATENAME = 233;
tsqlParser.DATEPART = 234;
tsqlParser.DATE_CORRELATION_OPTIMIZATION = 235;
tsqlParser.DAYS = 236;
tsqlParser.DB_CHAINING = 237;
tsqlParser.DEFAULT_FULLTEXT_LANGUAGE = 238;
tsqlParser.DEFAULT_LANGUAGE = 239;
tsqlParser.DELAY = 240;
tsqlParser.DELAYED_DURABILITY = 241;
tsqlParser.DELETED = 242;
tsqlParser.DENSE_RANK = 243;
tsqlParser.DIRECTORY_NAME = 244;
tsqlParser.DISABLE = 245;
tsqlParser.DISABLED = 246;
tsqlParser.DISABLE_BROKER = 247;
tsqlParser.DYNAMIC = 248;
tsqlParser.EMERGENCY = 249;
tsqlParser.ENABLE_BROKER = 250;
tsqlParser.ENCRYPTION = 251;
tsqlParser.ERROR_BROKER_CONVERSATIONS = 252;
tsqlParser.EXPAND = 253;
tsqlParser.FAST = 254;
tsqlParser.FAST_FORWARD = 255;
tsqlParser.FILEGROUP = 256;
tsqlParser.FILEGROWTH = 257;
tsqlParser.FILESTREAM = 258;
tsqlParser.FIRST = 259;
tsqlParser.FOLLOWING = 260;
tsqlParser.FORCE = 261;
tsqlParser.FORCED = 262;
tsqlParser.FORWARD_ONLY = 263;
tsqlParser.FULLSCAN = 264;
tsqlParser.GB = 265;
tsqlParser.GLOBAL = 266;
tsqlParser.GO = 267;
tsqlParser.GROUPING = 268;
tsqlParser.GROUPING_ID = 269;
tsqlParser.HADR = 270;
tsqlParser.HASH = 271;
tsqlParser.HONOR_BROKER_PRIORITY = 272;
tsqlParser.HOURS = 273;
tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX = 274;
tsqlParser.IMMEDIATE = 275;
tsqlParser.IMPERSONATE = 276;
tsqlParser.INCREMENTAL = 277;
tsqlParser.INSENSITIVE = 278;
tsqlParser.INSERTED = 279;
tsqlParser.ISOLATION = 280;
tsqlParser.KB = 281;
tsqlParser.KEEP = 282;
tsqlParser.KEEPFIXED = 283;
tsqlParser.KEYSET = 284;
tsqlParser.LAST = 285;
tsqlParser.LEVEL = 286;
tsqlParser.LOCAL = 287;
tsqlParser.LOCK_ESCALATION = 288;
tsqlParser.LOGIN = 289;
tsqlParser.LOOP = 290;
tsqlParser.MARK = 291;
tsqlParser.MAX = 292;
tsqlParser.MAXDOP = 293;
tsqlParser.MAXRECURSION = 294;
tsqlParser.MAXSIZE = 295;
tsqlParser.MB = 296;
tsqlParser.MEMORY_OPTIMIZED_DATA = 297;
tsqlParser.MIN = 298;
tsqlParser.MINUTES = 299;
tsqlParser.MIN_ACTIVE_ROWVERSION = 300;
tsqlParser.MIXED_PAGE_ALLOCATION = 301;
tsqlParser.MODIFY = 302;
tsqlParser.MULTI_USER = 303;
tsqlParser.NAME = 304;
tsqlParser.NESTED_TRIGGERS = 305;
tsqlParser.NEW_BROKER = 306;
tsqlParser.NEXT = 307;
tsqlParser.NOCOUNT = 308;
tsqlParser.NOEXPAND = 309;
tsqlParser.NON_TRANSACTED_ACCESS = 310;
tsqlParser.NORECOMPUTE = 311;
tsqlParser.NO_WAIT = 312;
tsqlParser.NTILE = 313;
tsqlParser.NUMBER = 314;
tsqlParser.NUMERIC_ROUNDABORT = 315;
tsqlParser.OFFLINE = 316;
tsqlParser.OFFSET = 317;
tsqlParser.ONLINE = 318;
tsqlParser.ONLY = 319;
tsqlParser.OPTIMISTIC = 320;
tsqlParser.OPTIMIZE = 321;
tsqlParser.OUT = 322;
tsqlParser.OUTPUT = 323;
tsqlParser.OWNER = 324;
tsqlParser.PAGE_VERIFY = 325;
tsqlParser.PARAMETERIZATION = 326;
tsqlParser.PARTITION = 327;
tsqlParser.PATH = 328;
tsqlParser.PRECEDING = 329;
tsqlParser.PRIOR = 330;
tsqlParser.PRIVILEGES = 331;
tsqlParser.QUOTED_IDENTIFIER = 332;
tsqlParser.RANGE = 333;
tsqlParser.RANK = 334;
tsqlParser.READONLY = 335;
tsqlParser.READ_COMMITTED_SNAPSHOT = 336;
tsqlParser.READ_ONLY = 337;
tsqlParser.READ_WRITE = 338;
tsqlParser.RECOMPILE = 339;
tsqlParser.RECOVERY = 340;
tsqlParser.RECURSIVE_TRIGGERS = 341;
tsqlParser.RELATIVE = 342;
tsqlParser.REMOTE = 343;
tsqlParser.REPEATABLE = 344;
tsqlParser.RESTRICTED_USER = 345;
tsqlParser.ROBUST = 346;
tsqlParser.ROOT = 347;
tsqlParser.ROW = 348;
tsqlParser.ROWGUID = 349;
tsqlParser.ROWS = 350;
tsqlParser.ROW_NUMBER = 351;
tsqlParser.SAMPLE = 352;
tsqlParser.SCHEMABINDING = 353;
tsqlParser.SCROLL = 354;
tsqlParser.SCROLL_LOCKS = 355;
tsqlParser.SECONDS = 356;
tsqlParser.SELF = 357;
tsqlParser.SERIALIZABLE = 358;
tsqlParser.SHOWPLAN = 359;
tsqlParser.SIMPLE = 360;
tsqlParser.SINGLE_USER = 361;
tsqlParser.SIZE = 362;
tsqlParser.SNAPSHOT = 363;
tsqlParser.SPATIAL_WINDOW_MAX_CELLS = 364;
tsqlParser.STATIC = 365;
tsqlParser.STATS_STREAM = 366;
tsqlParser.STDEV = 367;
tsqlParser.STDEVP = 368;
tsqlParser.SUM = 369;
tsqlParser.TAKE = 370;
tsqlParser.TARGET_RECOVERY_TIME = 371;
tsqlParser.TB = 372;
tsqlParser.TEXTIMAGE_ON = 373;
tsqlParser.THROW = 374;
tsqlParser.TIES = 375;
tsqlParser.TIME = 376;
tsqlParser.TORN_PAGE_DETECTION = 377;
tsqlParser.TRANSFORM_NOISE_WORDS = 378;
tsqlParser.TRUSTWORTHY = 379;
tsqlParser.TRY = 380;
tsqlParser.TWO_DIGIT_YEAR_CUTOFF = 381;
tsqlParser.TYPE = 382;
tsqlParser.TYPE_WARNING = 383;
tsqlParser.UNBOUNDED = 384;
tsqlParser.UNCOMMITTED = 385;
tsqlParser.UNKNOWN = 386;
tsqlParser.UNLIMITED = 387;
tsqlParser.USING = 388;
tsqlParser.VAR = 389;
tsqlParser.VARP = 390;
tsqlParser.VIEWS = 391;
tsqlParser.VIEW_METADATA = 392;
tsqlParser.WORK = 393;
tsqlParser.XML = 394;
tsqlParser.XMLNAMESPACES = 395;
tsqlParser.DOLLAR_ACTION = 396;
tsqlParser.SPACE = 397;
tsqlParser.COMMENT = 398;
tsqlParser.LINE_COMMENT = 399;
tsqlParser.DOUBLE_QUOTE_ID = 400;
tsqlParser.SQUARE_BRACKET_ID = 401;
tsqlParser.LOCAL_ID = 402;
tsqlParser.DECIMAL = 403;
tsqlParser.ID = 404;
tsqlParser.STRING = 405;
tsqlParser.BINARY = 406;
tsqlParser.FLOAT = 407;
tsqlParser.REAL = 408;
tsqlParser.EQUAL = 409;
tsqlParser.GREATER = 410;
tsqlParser.LESS = 411;
tsqlParser.EXCLAMATION = 412;
tsqlParser.PLUS_ASSIGN = 413;
tsqlParser.MINUS_ASSIGN = 414;
tsqlParser.MULT_ASSIGN = 415;
tsqlParser.DIV_ASSIGN = 416;
tsqlParser.MOD_ASSIGN = 417;
tsqlParser.AND_ASSIGN = 418;
tsqlParser.XOR_ASSIGN = 419;
tsqlParser.OR_ASSIGN = 420;
tsqlParser.DOT = 421;
tsqlParser.UNDERLINE = 422;
tsqlParser.AT = 423;
tsqlParser.SHARP = 424;
tsqlParser.DOLLAR = 425;
tsqlParser.LR_BRACKET = 426;
tsqlParser.RR_BRACKET = 427;
tsqlParser.COMMA = 428;
tsqlParser.SEMI = 429;
tsqlParser.COLON = 430;
tsqlParser.STAR = 431;
tsqlParser.DIVIDE = 432;
tsqlParser.MODULE = 433;
tsqlParser.PLUS = 434;
tsqlParser.MINUS = 435;
tsqlParser.BIT_NOT = 436;
tsqlParser.BIT_OR = 437;
tsqlParser.BIT_AND = 438;
tsqlParser.BIT_XOR = 439;

tsqlParser.RULE_tsql_file = 0;
tsqlParser.RULE_batch = 1;
tsqlParser.RULE_sql_clauses = 2;
tsqlParser.RULE_sql_clause = 3;
tsqlParser.RULE_dml_clause = 4;
tsqlParser.RULE_ddl_clause = 5;
tsqlParser.RULE_cfl_statement = 6;
tsqlParser.RULE_another_statement = 7;
tsqlParser.RULE_delete_statement = 8;
tsqlParser.RULE_delete_statement_from = 9;
tsqlParser.RULE_insert_statement = 10;
tsqlParser.RULE_insert_statement_value = 11;
tsqlParser.RULE_select_statement = 12;
tsqlParser.RULE_update_statement = 13;
tsqlParser.RULE_output_clause = 14;
tsqlParser.RULE_output_dml_list_elem = 15;
tsqlParser.RULE_output_column_name = 16;
tsqlParser.RULE_create_database = 17;
tsqlParser.RULE_create_index = 18;
tsqlParser.RULE_create_procedure = 19;
tsqlParser.RULE_procedure_param = 20;
tsqlParser.RULE_procedure_option = 21;
tsqlParser.RULE_create_statistics = 22;
tsqlParser.RULE_create_table = 23;
tsqlParser.RULE_create_view = 24;
tsqlParser.RULE_view_attribute = 25;
tsqlParser.RULE_alter_table = 26;
tsqlParser.RULE_alter_database = 27;
tsqlParser.RULE_database_optionspec = 28;
tsqlParser.RULE_auto_option = 29;
tsqlParser.RULE_change_tracking_option = 30;
tsqlParser.RULE_change_tracking_option_list = 31;
tsqlParser.RULE_containment_option = 32;
tsqlParser.RULE_cursor_option = 33;
tsqlParser.RULE_date_correlation_optimization_option = 34;
tsqlParser.RULE_db_encryption_option = 35;
tsqlParser.RULE_db_state_option = 36;
tsqlParser.RULE_db_update_option = 37;
tsqlParser.RULE_db_user_access_option = 38;
tsqlParser.RULE_delayed_durability_option = 39;
tsqlParser.RULE_external_access_option = 40;
tsqlParser.RULE_mixed_page_allocation_option = 41;
tsqlParser.RULE_parameterization_option = 42;
tsqlParser.RULE_recovery_option = 43;
tsqlParser.RULE_service_broker_option = 44;
tsqlParser.RULE_snapshot_option = 45;
tsqlParser.RULE_sql_option = 46;
tsqlParser.RULE_target_recovery_time_option = 47;
tsqlParser.RULE_termination = 48;
tsqlParser.RULE_drop_index = 49;
tsqlParser.RULE_drop_procedure = 50;
tsqlParser.RULE_drop_statistics = 51;
tsqlParser.RULE_drop_table = 52;
tsqlParser.RULE_drop_view = 53;
tsqlParser.RULE_create_type = 54;
tsqlParser.RULE_drop_type = 55;
tsqlParser.RULE_rowset_function_limited = 56;
tsqlParser.RULE_openquery = 57;
tsqlParser.RULE_opendatasource = 58;
tsqlParser.RULE_declare_statement = 59;
tsqlParser.RULE_cursor_statement = 60;
tsqlParser.RULE_execute_statement = 61;
tsqlParser.RULE_execute_statement_arg = 62;
tsqlParser.RULE_execute_var_string = 63;
tsqlParser.RULE_security_statement = 64;
tsqlParser.RULE_grant_permission = 65;
tsqlParser.RULE_set_statement = 66;
tsqlParser.RULE_transaction_statement = 67;
tsqlParser.RULE_go_statement = 68;
tsqlParser.RULE_use_statement = 69;
tsqlParser.RULE_execute_clause = 70;
tsqlParser.RULE_declare_local = 71;
tsqlParser.RULE_table_type_definition = 72;
tsqlParser.RULE_column_def_table_constraints = 73;
tsqlParser.RULE_column_def_table_constraint = 74;
tsqlParser.RULE_column_definition = 75;
tsqlParser.RULE_column_constraint = 76;
tsqlParser.RULE_table_constraint = 77;
tsqlParser.RULE_index_options = 78;
tsqlParser.RULE_index_option = 79;
tsqlParser.RULE_declare_cursor = 80;
tsqlParser.RULE_declare_set_cursor_common = 81;
tsqlParser.RULE_fetch_cursor = 82;
tsqlParser.RULE_set_special = 83;
tsqlParser.RULE_constant_LOCAL_ID = 84;
tsqlParser.RULE_expression = 85;
tsqlParser.RULE_constant_expression = 86;
tsqlParser.RULE_subquery = 87;
tsqlParser.RULE_with_expression = 88;
tsqlParser.RULE_common_table_expression = 89;
tsqlParser.RULE_update_elem = 90;
tsqlParser.RULE_search_condition_list = 91;
tsqlParser.RULE_search_condition = 92;
tsqlParser.RULE_predicate = 93;
tsqlParser.RULE_query_expression = 94;
tsqlParser.RULE_union = 95;
tsqlParser.RULE_query_specification = 96;
tsqlParser.RULE_top_clause = 97;
tsqlParser.RULE_order_by_clause = 98;
tsqlParser.RULE_for_clause = 99;
tsqlParser.RULE_xml_common_directives = 100;
tsqlParser.RULE_order_by_expression = 101;
tsqlParser.RULE_group_by_item = 102;
tsqlParser.RULE_option_clause = 103;
tsqlParser.RULE_option = 104;
tsqlParser.RULE_optimize_for_arg = 105;
tsqlParser.RULE_select_list = 106;
tsqlParser.RULE_select_list_elem = 107;
tsqlParser.RULE_table_sources = 108;
tsqlParser.RULE_table_source = 109;
tsqlParser.RULE_table_source_item_joined = 110;
tsqlParser.RULE_table_source_item = 111;
tsqlParser.RULE_change_table = 112;
tsqlParser.RULE_join_part = 113;
tsqlParser.RULE_table_name_with_hint = 114;
tsqlParser.RULE_rowset_function = 115;
tsqlParser.RULE_bulk_option = 116;
tsqlParser.RULE_derived_table = 117;
tsqlParser.RULE_function_call = 118;
tsqlParser.RULE_switch_section = 119;
tsqlParser.RULE_switch_search_condition_section = 120;
tsqlParser.RULE_as_table_alias = 121;
tsqlParser.RULE_table_alias = 122;
tsqlParser.RULE_with_table_hints = 123;
tsqlParser.RULE_insert_with_table_hints = 124;
tsqlParser.RULE_table_hint = 125;
tsqlParser.RULE_index_value = 126;
tsqlParser.RULE_column_alias_list = 127;
tsqlParser.RULE_column_alias = 128;
tsqlParser.RULE_a_star = 129;
tsqlParser.RULE_table_value_constructor = 130;
tsqlParser.RULE_expression_list = 131;
tsqlParser.RULE_ranking_windowed_function = 132;
tsqlParser.RULE_aggregate_windowed_function = 133;
tsqlParser.RULE_all_distinct = 134;
tsqlParser.RULE_over_clause = 135;
tsqlParser.RULE_row_or_range_clause = 136;
tsqlParser.RULE_window_frame_extent = 137;
tsqlParser.RULE_window_frame_bound = 138;
tsqlParser.RULE_window_frame_preceding = 139;
tsqlParser.RULE_window_frame_following = 140;
tsqlParser.RULE_create_database_option = 141;
tsqlParser.RULE_database_filestream_option = 142;
tsqlParser.RULE_database_file_spec = 143;
tsqlParser.RULE_file_group = 144;
tsqlParser.RULE_file_spec = 145;
tsqlParser.RULE_full_table_name = 146;
tsqlParser.RULE_table_name = 147;
tsqlParser.RULE_simple_name = 148;
tsqlParser.RULE_func_proc_name = 149;
tsqlParser.RULE_ddl_object = 150;
tsqlParser.RULE_full_column_name = 151;
tsqlParser.RULE_column_name_list = 152;
tsqlParser.RULE_cursor_name = 153;
tsqlParser.RULE_on_off = 154;
tsqlParser.RULE_clustered = 155;
tsqlParser.RULE_null_notnull = 156;
tsqlParser.RULE_scalar_function_name = 157;
tsqlParser.RULE_data_type = 158;
tsqlParser.RULE_default_value = 159;
tsqlParser.RULE_constant = 160;
tsqlParser.RULE_sign = 161;
tsqlParser.RULE_r_id = 162;
tsqlParser.RULE_simple_id = 163;
tsqlParser.RULE_comparison_operator = 164;
tsqlParser.RULE_assignment_operator = 165;
tsqlParser.RULE_file_size = 166;

function Tsql_fileContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_tsql_file;
    return this;
}

Tsql_fileContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Tsql_fileContext.prototype.constructor = Tsql_fileContext;

Tsql_fileContext.prototype.EOF = function() {
    return this.getToken(tsqlParser.EOF, 0);
};

Tsql_fileContext.prototype.batch = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(BatchContext);
    } else {
        return this.getTypedRuleContext(BatchContext,i);
    }
};

Tsql_fileContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTsql_file(this);
	}
};

Tsql_fileContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTsql_file(this);
	}
};




tsqlParser.Tsql_fileContext = Tsql_fileContext;

tsqlParser.prototype.tsql_file = function() {

    var localctx = new Tsql_fileContext(this, this._ctx, this.state);
    this.enterRule(localctx, 0, tsqlParser.RULE_tsql_file);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 337;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << tsqlParser.ALTER) | (1 << tsqlParser.BEGIN) | (1 << tsqlParser.BREAK) | (1 << tsqlParser.CLOSE) | (1 << tsqlParser.COMMIT))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (tsqlParser.CONTINUE - 34)) | (1 << (tsqlParser.CREATE - 34)) | (1 << (tsqlParser.DEALLOCATE - 34)) | (1 << (tsqlParser.DECLARE - 34)) | (1 << (tsqlParser.DELETE - 34)) | (1 << (tsqlParser.DROP - 34)) | (1 << (tsqlParser.EXECUTE - 34)))) !== 0) || ((((_la - 67)) & ~0x1f) == 0 && ((1 << (_la - 67)) & ((1 << (tsqlParser.FETCH - 67)) | (1 << (tsqlParser.FORCESEEK - 67)) | (1 << (tsqlParser.GOTO - 67)) | (1 << (tsqlParser.GRANT - 67)) | (1 << (tsqlParser.IF - 67)) | (1 << (tsqlParser.INSERT - 67)))) !== 0) || ((((_la - 114)) & ~0x1f) == 0 && ((1 << (_la - 114)) & ((1 << (tsqlParser.OPEN - 114)) | (1 << (tsqlParser.PRINT - 114)) | (1 << (tsqlParser.RAISERROR - 114)) | (1 << (tsqlParser.RETURN - 114)) | (1 << (tsqlParser.REVERT - 114)))) !== 0) || ((((_la - 146)) & ~0x1f) == 0 && ((1 << (_la - 146)) & ((1 << (tsqlParser.ROLLBACK - 146)) | (1 << (tsqlParser.SAVE - 146)) | (1 << (tsqlParser.SELECT - 146)) | (1 << (tsqlParser.SET - 146)))) !== 0) || ((((_la - 179)) & ~0x1f) == 0 && ((1 << (_la - 179)) & ((1 << (tsqlParser.UPDATE - 179)) | (1 << (tsqlParser.USE - 179)) | (1 << (tsqlParser.WAITFOR - 179)) | (1 << (tsqlParser.WHILE - 179)) | (1 << (tsqlParser.WITH - 179)) | (1 << (tsqlParser.ABSOLUTE - 179)) | (1 << (tsqlParser.APPLY - 179)) | (1 << (tsqlParser.AUTO - 179)) | (1 << (tsqlParser.AVG - 179)))) !== 0) || ((((_la - 211)) & ~0x1f) == 0 && ((1 << (_la - 211)) & ((1 << (tsqlParser.BASE64 - 211)) | (1 << (tsqlParser.CALLER - 211)) | (1 << (tsqlParser.CAST - 211)) | (1 << (tsqlParser.CATCH - 211)) | (1 << (tsqlParser.CHECKSUM_AGG - 211)) | (1 << (tsqlParser.COMMITTED - 211)) | (1 << (tsqlParser.CONCAT - 211)) | (1 << (tsqlParser.CONTROL - 211)) | (1 << (tsqlParser.COOKIE - 211)) | (1 << (tsqlParser.COUNT - 211)) | (1 << (tsqlParser.COUNT_BIG - 211)) | (1 << (tsqlParser.DELAY - 211)) | (1 << (tsqlParser.DELETED - 211)))) !== 0) || ((((_la - 243)) & ~0x1f) == 0 && ((1 << (_la - 243)) & ((1 << (tsqlParser.DENSE_RANK - 243)) | (1 << (tsqlParser.DISABLE - 243)) | (1 << (tsqlParser.DYNAMIC - 243)) | (1 << (tsqlParser.ENCRYPTION - 243)) | (1 << (tsqlParser.EXPAND - 243)) | (1 << (tsqlParser.FAST - 243)) | (1 << (tsqlParser.FAST_FORWARD - 243)) | (1 << (tsqlParser.FIRST - 243)) | (1 << (tsqlParser.FOLLOWING - 243)) | (1 << (tsqlParser.FORCE - 243)) | (1 << (tsqlParser.FORCED - 243)) | (1 << (tsqlParser.FORWARD_ONLY - 243)) | (1 << (tsqlParser.FULLSCAN - 243)) | (1 << (tsqlParser.GLOBAL - 243)) | (1 << (tsqlParser.GO - 243)) | (1 << (tsqlParser.GROUPING - 243)) | (1 << (tsqlParser.GROUPING_ID - 243)) | (1 << (tsqlParser.HASH - 243)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 243)))) !== 0) || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (tsqlParser.IMPERSONATE - 276)) | (1 << (tsqlParser.INSENSITIVE - 276)) | (1 << (tsqlParser.INSERTED - 276)) | (1 << (tsqlParser.ISOLATION - 276)) | (1 << (tsqlParser.KEEP - 276)) | (1 << (tsqlParser.KEEPFIXED - 276)) | (1 << (tsqlParser.KEYSET - 276)) | (1 << (tsqlParser.LAST - 276)) | (1 << (tsqlParser.LEVEL - 276)) | (1 << (tsqlParser.LOCAL - 276)) | (1 << (tsqlParser.LOCK_ESCALATION - 276)) | (1 << (tsqlParser.LOGIN - 276)) | (1 << (tsqlParser.LOOP - 276)) | (1 << (tsqlParser.MARK - 276)) | (1 << (tsqlParser.MAX - 276)) | (1 << (tsqlParser.MAXDOP - 276)) | (1 << (tsqlParser.MAXRECURSION - 276)) | (1 << (tsqlParser.MIN - 276)) | (1 << (tsqlParser.MODIFY - 276)) | (1 << (tsqlParser.NAME - 276)) | (1 << (tsqlParser.NEXT - 276)))) !== 0) || ((((_la - 308)) & ~0x1f) == 0 && ((1 << (_la - 308)) & ((1 << (tsqlParser.NOCOUNT - 308)) | (1 << (tsqlParser.NOEXPAND - 308)) | (1 << (tsqlParser.NORECOMPUTE - 308)) | (1 << (tsqlParser.NTILE - 308)) | (1 << (tsqlParser.NUMBER - 308)) | (1 << (tsqlParser.OFFSET - 308)) | (1 << (tsqlParser.ONLINE - 308)) | (1 << (tsqlParser.ONLY - 308)) | (1 << (tsqlParser.OPTIMISTIC - 308)) | (1 << (tsqlParser.OPTIMIZE - 308)) | (1 << (tsqlParser.OUT - 308)) | (1 << (tsqlParser.OUTPUT - 308)) | (1 << (tsqlParser.OWNER - 308)) | (1 << (tsqlParser.PARAMETERIZATION - 308)) | (1 << (tsqlParser.PARTITION - 308)) | (1 << (tsqlParser.PATH - 308)) | (1 << (tsqlParser.PRECEDING - 308)) | (1 << (tsqlParser.PRIOR - 308)) | (1 << (tsqlParser.PRIVILEGES - 308)) | (1 << (tsqlParser.RANGE - 308)) | (1 << (tsqlParser.RANK - 308)) | (1 << (tsqlParser.READONLY - 308)) | (1 << (tsqlParser.READ_ONLY - 308)) | (1 << (tsqlParser.RECOMPILE - 308)))) !== 0) || ((((_la - 342)) & ~0x1f) == 0 && ((1 << (_la - 342)) & ((1 << (tsqlParser.RELATIVE - 342)) | (1 << (tsqlParser.REMOTE - 342)) | (1 << (tsqlParser.REPEATABLE - 342)) | (1 << (tsqlParser.ROBUST - 342)) | (1 << (tsqlParser.ROOT - 342)) | (1 << (tsqlParser.ROW - 342)) | (1 << (tsqlParser.ROWGUID - 342)) | (1 << (tsqlParser.ROWS - 342)) | (1 << (tsqlParser.ROW_NUMBER - 342)) | (1 << (tsqlParser.SAMPLE - 342)) | (1 << (tsqlParser.SCHEMABINDING - 342)) | (1 << (tsqlParser.SCROLL - 342)) | (1 << (tsqlParser.SCROLL_LOCKS - 342)) | (1 << (tsqlParser.SELF - 342)) | (1 << (tsqlParser.SERIALIZABLE - 342)) | (1 << (tsqlParser.SIMPLE - 342)) | (1 << (tsqlParser.SIZE - 342)) | (1 << (tsqlParser.SNAPSHOT - 342)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 342)) | (1 << (tsqlParser.STATIC - 342)) | (1 << (tsqlParser.STATS_STREAM - 342)) | (1 << (tsqlParser.STDEV - 342)) | (1 << (tsqlParser.STDEVP - 342)) | (1 << (tsqlParser.SUM - 342)) | (1 << (tsqlParser.TEXTIMAGE_ON - 342)))) !== 0) || ((((_la - 374)) & ~0x1f) == 0 && ((1 << (_la - 374)) & ((1 << (tsqlParser.THROW - 374)) | (1 << (tsqlParser.TIES - 374)) | (1 << (tsqlParser.TIME - 374)) | (1 << (tsqlParser.TRY - 374)) | (1 << (tsqlParser.TYPE - 374)) | (1 << (tsqlParser.TYPE_WARNING - 374)) | (1 << (tsqlParser.UNBOUNDED - 374)) | (1 << (tsqlParser.UNCOMMITTED - 374)) | (1 << (tsqlParser.UNKNOWN - 374)) | (1 << (tsqlParser.USING - 374)) | (1 << (tsqlParser.VAR - 374)) | (1 << (tsqlParser.VARP - 374)) | (1 << (tsqlParser.VIEWS - 374)) | (1 << (tsqlParser.VIEW_METADATA - 374)) | (1 << (tsqlParser.WORK - 374)) | (1 << (tsqlParser.XML - 374)) | (1 << (tsqlParser.XMLNAMESPACES - 374)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 374)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 374)) | (1 << (tsqlParser.ID - 374)))) !== 0) || _la===tsqlParser.LR_BRACKET) {
            this.state = 334;
            this.batch();
            this.state = 339;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 340;
        this.match(tsqlParser.EOF);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function BatchContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_batch;
    return this;
}

BatchContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
BatchContext.prototype.constructor = BatchContext;

BatchContext.prototype.sql_clauses = function() {
    return this.getTypedRuleContext(Sql_clausesContext,0);
};

BatchContext.prototype.go_statement = function() {
    return this.getTypedRuleContext(Go_statementContext,0);
};

BatchContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBatch(this);
	}
};

BatchContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBatch(this);
	}
};




tsqlParser.BatchContext = BatchContext;

tsqlParser.prototype.batch = function() {

    var localctx = new BatchContext(this, this._ctx, this.state);
    this.enterRule(localctx, 2, tsqlParser.RULE_batch);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 342;
        this.sql_clauses();
        this.state = 344;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,1,this._ctx);
        if(la_===1) {
            this.state = 343;
            this.go_statement();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Sql_clausesContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_sql_clauses;
    return this;
}

Sql_clausesContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Sql_clausesContext.prototype.constructor = Sql_clausesContext;

Sql_clausesContext.prototype.sql_clause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Sql_clauseContext);
    } else {
        return this.getTypedRuleContext(Sql_clauseContext,i);
    }
};

Sql_clausesContext.prototype.SEMI = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.SEMI);
    } else {
        return this.getToken(tsqlParser.SEMI, i);
    }
};


Sql_clausesContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSql_clauses(this);
	}
};

Sql_clausesContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSql_clauses(this);
	}
};




tsqlParser.Sql_clausesContext = Sql_clausesContext;

tsqlParser.prototype.sql_clauses = function() {

    var localctx = new Sql_clausesContext(this, this._ctx, this.state);
    this.enterRule(localctx, 4, tsqlParser.RULE_sql_clauses);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 350; 
        this._errHandler.sync(this);
        var _alt = 1;
        do {
        	switch (_alt) {
        	case 1:
        		this.state = 346;
        		this.sql_clause();
        		this.state = 348;
        		this._errHandler.sync(this);
        		var la_ = this._interp.adaptivePredict(this._input,2,this._ctx);
        		if(la_===1) {
        		    this.state = 347;
        		    this.match(tsqlParser.SEMI);

        		}
        		break;
        	default:
        		throw new antlr4.error.NoViableAltException(this);
        	}
        	this.state = 352; 
        	this._errHandler.sync(this);
        	_alt = this._interp.adaptivePredict(this._input,3, this._ctx);
        } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Sql_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_sql_clause;
    return this;
}

Sql_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Sql_clauseContext.prototype.constructor = Sql_clauseContext;

Sql_clauseContext.prototype.dml_clause = function() {
    return this.getTypedRuleContext(Dml_clauseContext,0);
};

Sql_clauseContext.prototype.ddl_clause = function() {
    return this.getTypedRuleContext(Ddl_clauseContext,0);
};

Sql_clauseContext.prototype.cfl_statement = function() {
    return this.getTypedRuleContext(Cfl_statementContext,0);
};

Sql_clauseContext.prototype.another_statement = function() {
    return this.getTypedRuleContext(Another_statementContext,0);
};

Sql_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSql_clause(this);
	}
};

Sql_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSql_clause(this);
	}
};




tsqlParser.Sql_clauseContext = Sql_clauseContext;

tsqlParser.prototype.sql_clause = function() {

    var localctx = new Sql_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 6, tsqlParser.RULE_sql_clause);
    try {
        this.state = 358;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,4,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 354;
            this.dml_clause();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 355;
            this.ddl_clause();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 356;
            this.cfl_statement();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 357;
            this.another_statement();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Dml_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_dml_clause;
    return this;
}

Dml_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Dml_clauseContext.prototype.constructor = Dml_clauseContext;

Dml_clauseContext.prototype.delete_statement = function() {
    return this.getTypedRuleContext(Delete_statementContext,0);
};

Dml_clauseContext.prototype.insert_statement = function() {
    return this.getTypedRuleContext(Insert_statementContext,0);
};

Dml_clauseContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

Dml_clauseContext.prototype.update_statement = function() {
    return this.getTypedRuleContext(Update_statementContext,0);
};

Dml_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDml_clause(this);
	}
};

Dml_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDml_clause(this);
	}
};




tsqlParser.Dml_clauseContext = Dml_clauseContext;

tsqlParser.prototype.dml_clause = function() {

    var localctx = new Dml_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 8, tsqlParser.RULE_dml_clause);
    try {
        this.state = 364;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,5,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 360;
            this.delete_statement();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 361;
            this.insert_statement();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 362;
            this.select_statement();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 363;
            this.update_statement();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Ddl_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_ddl_clause;
    return this;
}

Ddl_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Ddl_clauseContext.prototype.constructor = Ddl_clauseContext;

Ddl_clauseContext.prototype.create_database = function() {
    return this.getTypedRuleContext(Create_databaseContext,0);
};

Ddl_clauseContext.prototype.create_index = function() {
    return this.getTypedRuleContext(Create_indexContext,0);
};

Ddl_clauseContext.prototype.create_procedure = function() {
    return this.getTypedRuleContext(Create_procedureContext,0);
};

Ddl_clauseContext.prototype.create_statistics = function() {
    return this.getTypedRuleContext(Create_statisticsContext,0);
};

Ddl_clauseContext.prototype.create_table = function() {
    return this.getTypedRuleContext(Create_tableContext,0);
};

Ddl_clauseContext.prototype.create_type = function() {
    return this.getTypedRuleContext(Create_typeContext,0);
};

Ddl_clauseContext.prototype.create_view = function() {
    return this.getTypedRuleContext(Create_viewContext,0);
};

Ddl_clauseContext.prototype.alter_table = function() {
    return this.getTypedRuleContext(Alter_tableContext,0);
};

Ddl_clauseContext.prototype.alter_database = function() {
    return this.getTypedRuleContext(Alter_databaseContext,0);
};

Ddl_clauseContext.prototype.drop_index = function() {
    return this.getTypedRuleContext(Drop_indexContext,0);
};

Ddl_clauseContext.prototype.drop_procedure = function() {
    return this.getTypedRuleContext(Drop_procedureContext,0);
};

Ddl_clauseContext.prototype.drop_statistics = function() {
    return this.getTypedRuleContext(Drop_statisticsContext,0);
};

Ddl_clauseContext.prototype.drop_table = function() {
    return this.getTypedRuleContext(Drop_tableContext,0);
};

Ddl_clauseContext.prototype.drop_type = function() {
    return this.getTypedRuleContext(Drop_typeContext,0);
};

Ddl_clauseContext.prototype.drop_view = function() {
    return this.getTypedRuleContext(Drop_viewContext,0);
};

Ddl_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDdl_clause(this);
	}
};

Ddl_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDdl_clause(this);
	}
};




tsqlParser.Ddl_clauseContext = Ddl_clauseContext;

tsqlParser.prototype.ddl_clause = function() {

    var localctx = new Ddl_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 10, tsqlParser.RULE_ddl_clause);
    try {
        this.state = 381;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,6,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 366;
            this.create_database();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 367;
            this.create_index();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 368;
            this.create_procedure();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 369;
            this.create_statistics();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 370;
            this.create_table();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 371;
            this.create_type();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 372;
            this.create_view();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 373;
            this.alter_table();
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 374;
            this.alter_database();
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 375;
            this.drop_index();
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 376;
            this.drop_procedure();
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 377;
            this.drop_statistics();
            break;

        case 13:
            this.enterOuterAlt(localctx, 13);
            this.state = 378;
            this.drop_table();
            break;

        case 14:
            this.enterOuterAlt(localctx, 14);
            this.state = 379;
            this.drop_type();
            break;

        case 15:
            this.enterOuterAlt(localctx, 15);
            this.state = 380;
            this.drop_view();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Cfl_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_cfl_statement;
    return this;
}

Cfl_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Cfl_statementContext.prototype.constructor = Cfl_statementContext;


 
Cfl_statementContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function Return_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Return_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Return_statementContext.prototype.constructor = Return_statementContext;

tsqlParser.Return_statementContext = Return_statementContext;

Return_statementContext.prototype.RETURN = function() {
    return this.getToken(tsqlParser.RETURN, 0);
};

Return_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
Return_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterReturn_statement(this);
	}
};

Return_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitReturn_statement(this);
	}
};


function Break_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Break_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Break_statementContext.prototype.constructor = Break_statementContext;

tsqlParser.Break_statementContext = Break_statementContext;

Break_statementContext.prototype.BREAK = function() {
    return this.getToken(tsqlParser.BREAK, 0);
};
Break_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBreak_statement(this);
	}
};

Break_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBreak_statement(this);
	}
};


function Try_catch_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    this.try_clauses = null; // Sql_clausesContext;
    this.catch_clauses = null; // Sql_clausesContext;
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Try_catch_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Try_catch_statementContext.prototype.constructor = Try_catch_statementContext;

tsqlParser.Try_catch_statementContext = Try_catch_statementContext;

Try_catch_statementContext.prototype.BEGIN = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.BEGIN);
    } else {
        return this.getToken(tsqlParser.BEGIN, i);
    }
};


Try_catch_statementContext.prototype.TRY = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.TRY);
    } else {
        return this.getToken(tsqlParser.TRY, i);
    }
};


Try_catch_statementContext.prototype.END = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.END);
    } else {
        return this.getToken(tsqlParser.END, i);
    }
};


Try_catch_statementContext.prototype.CATCH = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.CATCH);
    } else {
        return this.getToken(tsqlParser.CATCH, i);
    }
};


Try_catch_statementContext.prototype.sql_clauses = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Sql_clausesContext);
    } else {
        return this.getTypedRuleContext(Sql_clausesContext,i);
    }
};
Try_catch_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTry_catch_statement(this);
	}
};

Try_catch_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTry_catch_statement(this);
	}
};


function Raiseerror_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    this.msg = null; // Token;
    this.severity = null; // Constant_LOCAL_IDContext;
    this.state = null; // Constant_LOCAL_IDContext;
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Raiseerror_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Raiseerror_statementContext.prototype.constructor = Raiseerror_statementContext;

tsqlParser.Raiseerror_statementContext = Raiseerror_statementContext;

Raiseerror_statementContext.prototype.RAISERROR = function() {
    return this.getToken(tsqlParser.RAISERROR, 0);
};

Raiseerror_statementContext.prototype.constant_LOCAL_ID = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Constant_LOCAL_IDContext);
    } else {
        return this.getTypedRuleContext(Constant_LOCAL_IDContext,i);
    }
};

Raiseerror_statementContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Raiseerror_statementContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Raiseerror_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};
Raiseerror_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRaiseerror_statement(this);
	}
};

Raiseerror_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRaiseerror_statement(this);
	}
};


function Print_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Print_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Print_statementContext.prototype.constructor = Print_statementContext;

tsqlParser.Print_statementContext = Print_statementContext;

Print_statementContext.prototype.PRINT = function() {
    return this.getToken(tsqlParser.PRINT, 0);
};

Print_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
Print_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterPrint_statement(this);
	}
};

Print_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitPrint_statement(this);
	}
};


function If_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

If_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
If_statementContext.prototype.constructor = If_statementContext;

tsqlParser.If_statementContext = If_statementContext;

If_statementContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

If_statementContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

If_statementContext.prototype.sql_clause = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Sql_clauseContext);
    } else {
        return this.getTypedRuleContext(Sql_clauseContext,i);
    }
};

If_statementContext.prototype.ELSE = function() {
    return this.getToken(tsqlParser.ELSE, 0);
};
If_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterIf_statement(this);
	}
};

If_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitIf_statement(this);
	}
};


function Waitfor_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Waitfor_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Waitfor_statementContext.prototype.constructor = Waitfor_statementContext;

tsqlParser.Waitfor_statementContext = Waitfor_statementContext;

Waitfor_statementContext.prototype.WAITFOR = function() {
    return this.getToken(tsqlParser.WAITFOR, 0);
};

Waitfor_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Waitfor_statementContext.prototype.DELAY = function() {
    return this.getToken(tsqlParser.DELAY, 0);
};

Waitfor_statementContext.prototype.TIME = function() {
    return this.getToken(tsqlParser.TIME, 0);
};
Waitfor_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWaitfor_statement(this);
	}
};

Waitfor_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWaitfor_statement(this);
	}
};


function Block_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Block_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Block_statementContext.prototype.constructor = Block_statementContext;

tsqlParser.Block_statementContext = Block_statementContext;

Block_statementContext.prototype.BEGIN = function() {
    return this.getToken(tsqlParser.BEGIN, 0);
};

Block_statementContext.prototype.END = function() {
    return this.getToken(tsqlParser.END, 0);
};

Block_statementContext.prototype.sql_clauses = function() {
    return this.getTypedRuleContext(Sql_clausesContext,0);
};
Block_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBlock_statement(this);
	}
};

Block_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBlock_statement(this);
	}
};


function While_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

While_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
While_statementContext.prototype.constructor = While_statementContext;

tsqlParser.While_statementContext = While_statementContext;

While_statementContext.prototype.WHILE = function() {
    return this.getToken(tsqlParser.WHILE, 0);
};

While_statementContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

While_statementContext.prototype.sql_clause = function() {
    return this.getTypedRuleContext(Sql_clauseContext,0);
};

While_statementContext.prototype.BREAK = function() {
    return this.getToken(tsqlParser.BREAK, 0);
};

While_statementContext.prototype.CONTINUE = function() {
    return this.getToken(tsqlParser.CONTINUE, 0);
};
While_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWhile_statement(this);
	}
};

While_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWhile_statement(this);
	}
};


function Throw_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    this.error_number = null; // Token;
    this.message = null; // Token;
    this.state = null; // Token;
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Throw_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Throw_statementContext.prototype.constructor = Throw_statementContext;

tsqlParser.Throw_statementContext = Throw_statementContext;

Throw_statementContext.prototype.THROW = function() {
    return this.getToken(tsqlParser.THROW, 0);
};

Throw_statementContext.prototype.DECIMAL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.DECIMAL);
    } else {
        return this.getToken(tsqlParser.DECIMAL, i);
    }
};


Throw_statementContext.prototype.LOCAL_ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.LOCAL_ID);
    } else {
        return this.getToken(tsqlParser.LOCAL_ID, i);
    }
};


Throw_statementContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};
Throw_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterThrow_statement(this);
	}
};

Throw_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitThrow_statement(this);
	}
};


function Goto_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Goto_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Goto_statementContext.prototype.constructor = Goto_statementContext;

tsqlParser.Goto_statementContext = Goto_statementContext;

Goto_statementContext.prototype.GOTO = function() {
    return this.getToken(tsqlParser.GOTO, 0);
};

Goto_statementContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};
Goto_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterGoto_statement(this);
	}
};

Goto_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitGoto_statement(this);
	}
};


function Continue_statementContext(parser, ctx) {
	Cfl_statementContext.call(this, parser);
    Cfl_statementContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Continue_statementContext.prototype = Object.create(Cfl_statementContext.prototype);
Continue_statementContext.prototype.constructor = Continue_statementContext;

tsqlParser.Continue_statementContext = Continue_statementContext;

Continue_statementContext.prototype.CONTINUE = function() {
    return this.getToken(tsqlParser.CONTINUE, 0);
};
Continue_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterContinue_statement(this);
	}
};

Continue_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitContinue_statement(this);
	}
};



tsqlParser.Cfl_statementContext = Cfl_statementContext;

tsqlParser.prototype.cfl_statement = function() {

    var localctx = new Cfl_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 12, tsqlParser.RULE_cfl_statement);
    var _la = 0; // Token type
    try {
        this.state = 508;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,33,this._ctx);
        switch(la_) {
        case 1:
            localctx = new Block_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 383;
            this.match(tsqlParser.BEGIN);
            this.state = 385;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.SEMI) {
                this.state = 384;
                this.match(tsqlParser.SEMI);
            }

            this.state = 388;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << tsqlParser.ALTER) | (1 << tsqlParser.BEGIN) | (1 << tsqlParser.BREAK) | (1 << tsqlParser.CLOSE) | (1 << tsqlParser.COMMIT))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (tsqlParser.CONTINUE - 34)) | (1 << (tsqlParser.CREATE - 34)) | (1 << (tsqlParser.DEALLOCATE - 34)) | (1 << (tsqlParser.DECLARE - 34)) | (1 << (tsqlParser.DELETE - 34)) | (1 << (tsqlParser.DROP - 34)) | (1 << (tsqlParser.EXECUTE - 34)))) !== 0) || ((((_la - 67)) & ~0x1f) == 0 && ((1 << (_la - 67)) & ((1 << (tsqlParser.FETCH - 67)) | (1 << (tsqlParser.FORCESEEK - 67)) | (1 << (tsqlParser.GOTO - 67)) | (1 << (tsqlParser.GRANT - 67)) | (1 << (tsqlParser.IF - 67)) | (1 << (tsqlParser.INSERT - 67)))) !== 0) || ((((_la - 114)) & ~0x1f) == 0 && ((1 << (_la - 114)) & ((1 << (tsqlParser.OPEN - 114)) | (1 << (tsqlParser.PRINT - 114)) | (1 << (tsqlParser.RAISERROR - 114)) | (1 << (tsqlParser.RETURN - 114)) | (1 << (tsqlParser.REVERT - 114)))) !== 0) || ((((_la - 146)) & ~0x1f) == 0 && ((1 << (_la - 146)) & ((1 << (tsqlParser.ROLLBACK - 146)) | (1 << (tsqlParser.SAVE - 146)) | (1 << (tsqlParser.SELECT - 146)) | (1 << (tsqlParser.SET - 146)))) !== 0) || ((((_la - 179)) & ~0x1f) == 0 && ((1 << (_la - 179)) & ((1 << (tsqlParser.UPDATE - 179)) | (1 << (tsqlParser.USE - 179)) | (1 << (tsqlParser.WAITFOR - 179)) | (1 << (tsqlParser.WHILE - 179)) | (1 << (tsqlParser.WITH - 179)) | (1 << (tsqlParser.ABSOLUTE - 179)) | (1 << (tsqlParser.APPLY - 179)) | (1 << (tsqlParser.AUTO - 179)) | (1 << (tsqlParser.AVG - 179)))) !== 0) || ((((_la - 211)) & ~0x1f) == 0 && ((1 << (_la - 211)) & ((1 << (tsqlParser.BASE64 - 211)) | (1 << (tsqlParser.CALLER - 211)) | (1 << (tsqlParser.CAST - 211)) | (1 << (tsqlParser.CATCH - 211)) | (1 << (tsqlParser.CHECKSUM_AGG - 211)) | (1 << (tsqlParser.COMMITTED - 211)) | (1 << (tsqlParser.CONCAT - 211)) | (1 << (tsqlParser.CONTROL - 211)) | (1 << (tsqlParser.COOKIE - 211)) | (1 << (tsqlParser.COUNT - 211)) | (1 << (tsqlParser.COUNT_BIG - 211)) | (1 << (tsqlParser.DELAY - 211)) | (1 << (tsqlParser.DELETED - 211)))) !== 0) || ((((_la - 243)) & ~0x1f) == 0 && ((1 << (_la - 243)) & ((1 << (tsqlParser.DENSE_RANK - 243)) | (1 << (tsqlParser.DISABLE - 243)) | (1 << (tsqlParser.DYNAMIC - 243)) | (1 << (tsqlParser.ENCRYPTION - 243)) | (1 << (tsqlParser.EXPAND - 243)) | (1 << (tsqlParser.FAST - 243)) | (1 << (tsqlParser.FAST_FORWARD - 243)) | (1 << (tsqlParser.FIRST - 243)) | (1 << (tsqlParser.FOLLOWING - 243)) | (1 << (tsqlParser.FORCE - 243)) | (1 << (tsqlParser.FORCED - 243)) | (1 << (tsqlParser.FORWARD_ONLY - 243)) | (1 << (tsqlParser.FULLSCAN - 243)) | (1 << (tsqlParser.GLOBAL - 243)) | (1 << (tsqlParser.GO - 243)) | (1 << (tsqlParser.GROUPING - 243)) | (1 << (tsqlParser.GROUPING_ID - 243)) | (1 << (tsqlParser.HASH - 243)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 243)))) !== 0) || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (tsqlParser.IMPERSONATE - 276)) | (1 << (tsqlParser.INSENSITIVE - 276)) | (1 << (tsqlParser.INSERTED - 276)) | (1 << (tsqlParser.ISOLATION - 276)) | (1 << (tsqlParser.KEEP - 276)) | (1 << (tsqlParser.KEEPFIXED - 276)) | (1 << (tsqlParser.KEYSET - 276)) | (1 << (tsqlParser.LAST - 276)) | (1 << (tsqlParser.LEVEL - 276)) | (1 << (tsqlParser.LOCAL - 276)) | (1 << (tsqlParser.LOCK_ESCALATION - 276)) | (1 << (tsqlParser.LOGIN - 276)) | (1 << (tsqlParser.LOOP - 276)) | (1 << (tsqlParser.MARK - 276)) | (1 << (tsqlParser.MAX - 276)) | (1 << (tsqlParser.MAXDOP - 276)) | (1 << (tsqlParser.MAXRECURSION - 276)) | (1 << (tsqlParser.MIN - 276)) | (1 << (tsqlParser.MODIFY - 276)) | (1 << (tsqlParser.NAME - 276)) | (1 << (tsqlParser.NEXT - 276)))) !== 0) || ((((_la - 308)) & ~0x1f) == 0 && ((1 << (_la - 308)) & ((1 << (tsqlParser.NOCOUNT - 308)) | (1 << (tsqlParser.NOEXPAND - 308)) | (1 << (tsqlParser.NORECOMPUTE - 308)) | (1 << (tsqlParser.NTILE - 308)) | (1 << (tsqlParser.NUMBER - 308)) | (1 << (tsqlParser.OFFSET - 308)) | (1 << (tsqlParser.ONLINE - 308)) | (1 << (tsqlParser.ONLY - 308)) | (1 << (tsqlParser.OPTIMISTIC - 308)) | (1 << (tsqlParser.OPTIMIZE - 308)) | (1 << (tsqlParser.OUT - 308)) | (1 << (tsqlParser.OUTPUT - 308)) | (1 << (tsqlParser.OWNER - 308)) | (1 << (tsqlParser.PARAMETERIZATION - 308)) | (1 << (tsqlParser.PARTITION - 308)) | (1 << (tsqlParser.PATH - 308)) | (1 << (tsqlParser.PRECEDING - 308)) | (1 << (tsqlParser.PRIOR - 308)) | (1 << (tsqlParser.PRIVILEGES - 308)) | (1 << (tsqlParser.RANGE - 308)) | (1 << (tsqlParser.RANK - 308)) | (1 << (tsqlParser.READONLY - 308)) | (1 << (tsqlParser.READ_ONLY - 308)) | (1 << (tsqlParser.RECOMPILE - 308)))) !== 0) || ((((_la - 342)) & ~0x1f) == 0 && ((1 << (_la - 342)) & ((1 << (tsqlParser.RELATIVE - 342)) | (1 << (tsqlParser.REMOTE - 342)) | (1 << (tsqlParser.REPEATABLE - 342)) | (1 << (tsqlParser.ROBUST - 342)) | (1 << (tsqlParser.ROOT - 342)) | (1 << (tsqlParser.ROW - 342)) | (1 << (tsqlParser.ROWGUID - 342)) | (1 << (tsqlParser.ROWS - 342)) | (1 << (tsqlParser.ROW_NUMBER - 342)) | (1 << (tsqlParser.SAMPLE - 342)) | (1 << (tsqlParser.SCHEMABINDING - 342)) | (1 << (tsqlParser.SCROLL - 342)) | (1 << (tsqlParser.SCROLL_LOCKS - 342)) | (1 << (tsqlParser.SELF - 342)) | (1 << (tsqlParser.SERIALIZABLE - 342)) | (1 << (tsqlParser.SIMPLE - 342)) | (1 << (tsqlParser.SIZE - 342)) | (1 << (tsqlParser.SNAPSHOT - 342)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 342)) | (1 << (tsqlParser.STATIC - 342)) | (1 << (tsqlParser.STATS_STREAM - 342)) | (1 << (tsqlParser.STDEV - 342)) | (1 << (tsqlParser.STDEVP - 342)) | (1 << (tsqlParser.SUM - 342)) | (1 << (tsqlParser.TEXTIMAGE_ON - 342)))) !== 0) || ((((_la - 374)) & ~0x1f) == 0 && ((1 << (_la - 374)) & ((1 << (tsqlParser.THROW - 374)) | (1 << (tsqlParser.TIES - 374)) | (1 << (tsqlParser.TIME - 374)) | (1 << (tsqlParser.TRY - 374)) | (1 << (tsqlParser.TYPE - 374)) | (1 << (tsqlParser.TYPE_WARNING - 374)) | (1 << (tsqlParser.UNBOUNDED - 374)) | (1 << (tsqlParser.UNCOMMITTED - 374)) | (1 << (tsqlParser.UNKNOWN - 374)) | (1 << (tsqlParser.USING - 374)) | (1 << (tsqlParser.VAR - 374)) | (1 << (tsqlParser.VARP - 374)) | (1 << (tsqlParser.VIEWS - 374)) | (1 << (tsqlParser.VIEW_METADATA - 374)) | (1 << (tsqlParser.WORK - 374)) | (1 << (tsqlParser.XML - 374)) | (1 << (tsqlParser.XMLNAMESPACES - 374)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 374)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 374)) | (1 << (tsqlParser.ID - 374)))) !== 0) || _la===tsqlParser.LR_BRACKET) {
                this.state = 387;
                this.sql_clauses();
            }

            this.state = 390;
            this.match(tsqlParser.END);
            this.state = 392;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,9,this._ctx);
            if(la_===1) {
                this.state = 391;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            localctx = new Break_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 394;
            this.match(tsqlParser.BREAK);
            this.state = 396;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,10,this._ctx);
            if(la_===1) {
                this.state = 395;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 3:
            localctx = new Continue_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 398;
            this.match(tsqlParser.CONTINUE);
            this.state = 400;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,11,this._ctx);
            if(la_===1) {
                this.state = 399;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 4:
            localctx = new Goto_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 402;
            this.match(tsqlParser.GOTO);
            this.state = 403;
            this.r_id();
            this.state = 405;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,12,this._ctx);
            if(la_===1) {
                this.state = 404;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 5:
            localctx = new Goto_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 407;
            this.r_id();
            this.state = 408;
            this.match(tsqlParser.COLON);
            this.state = 410;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,13,this._ctx);
            if(la_===1) {
                this.state = 409;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 6:
            localctx = new If_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 412;
            this.match(tsqlParser.IF);
            this.state = 413;
            this.search_condition(0);
            this.state = 414;
            this.sql_clause();
            this.state = 417;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,14,this._ctx);
            if(la_===1) {
                this.state = 415;
                this.match(tsqlParser.ELSE);
                this.state = 416;
                this.sql_clause();

            }
            this.state = 420;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,15,this._ctx);
            if(la_===1) {
                this.state = 419;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 7:
            localctx = new Return_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 422;
            this.match(tsqlParser.RETURN);
            this.state = 424;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,16,this._ctx);
            if(la_===1) {
                this.state = 423;
                this.expression(0);

            }
            this.state = 427;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,17,this._ctx);
            if(la_===1) {
                this.state = 426;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 8:
            localctx = new Throw_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 429;
            this.match(tsqlParser.THROW);
            this.state = 435;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.DECIMAL) {
                this.state = 430;
                localctx.error_number = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.DECIMAL)) {
                    localctx.error_number = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 431;
                this.match(tsqlParser.COMMA);
                this.state = 432;
                localctx.message = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.STRING)) {
                    localctx.message = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 433;
                this.match(tsqlParser.COMMA);
                this.state = 434;
                localctx.state = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.DECIMAL)) {
                    localctx.state = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 438;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,19,this._ctx);
            if(la_===1) {
                this.state = 437;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 9:
            localctx = new Try_catch_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 440;
            this.match(tsqlParser.BEGIN);
            this.state = 441;
            this.match(tsqlParser.TRY);
            this.state = 443;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.SEMI) {
                this.state = 442;
                this.match(tsqlParser.SEMI);
            }

            this.state = 446;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << tsqlParser.ALTER) | (1 << tsqlParser.BEGIN) | (1 << tsqlParser.BREAK) | (1 << tsqlParser.CLOSE) | (1 << tsqlParser.COMMIT))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (tsqlParser.CONTINUE - 34)) | (1 << (tsqlParser.CREATE - 34)) | (1 << (tsqlParser.DEALLOCATE - 34)) | (1 << (tsqlParser.DECLARE - 34)) | (1 << (tsqlParser.DELETE - 34)) | (1 << (tsqlParser.DROP - 34)) | (1 << (tsqlParser.EXECUTE - 34)))) !== 0) || ((((_la - 67)) & ~0x1f) == 0 && ((1 << (_la - 67)) & ((1 << (tsqlParser.FETCH - 67)) | (1 << (tsqlParser.FORCESEEK - 67)) | (1 << (tsqlParser.GOTO - 67)) | (1 << (tsqlParser.GRANT - 67)) | (1 << (tsqlParser.IF - 67)) | (1 << (tsqlParser.INSERT - 67)))) !== 0) || ((((_la - 114)) & ~0x1f) == 0 && ((1 << (_la - 114)) & ((1 << (tsqlParser.OPEN - 114)) | (1 << (tsqlParser.PRINT - 114)) | (1 << (tsqlParser.RAISERROR - 114)) | (1 << (tsqlParser.RETURN - 114)) | (1 << (tsqlParser.REVERT - 114)))) !== 0) || ((((_la - 146)) & ~0x1f) == 0 && ((1 << (_la - 146)) & ((1 << (tsqlParser.ROLLBACK - 146)) | (1 << (tsqlParser.SAVE - 146)) | (1 << (tsqlParser.SELECT - 146)) | (1 << (tsqlParser.SET - 146)))) !== 0) || ((((_la - 179)) & ~0x1f) == 0 && ((1 << (_la - 179)) & ((1 << (tsqlParser.UPDATE - 179)) | (1 << (tsqlParser.USE - 179)) | (1 << (tsqlParser.WAITFOR - 179)) | (1 << (tsqlParser.WHILE - 179)) | (1 << (tsqlParser.WITH - 179)) | (1 << (tsqlParser.ABSOLUTE - 179)) | (1 << (tsqlParser.APPLY - 179)) | (1 << (tsqlParser.AUTO - 179)) | (1 << (tsqlParser.AVG - 179)))) !== 0) || ((((_la - 211)) & ~0x1f) == 0 && ((1 << (_la - 211)) & ((1 << (tsqlParser.BASE64 - 211)) | (1 << (tsqlParser.CALLER - 211)) | (1 << (tsqlParser.CAST - 211)) | (1 << (tsqlParser.CATCH - 211)) | (1 << (tsqlParser.CHECKSUM_AGG - 211)) | (1 << (tsqlParser.COMMITTED - 211)) | (1 << (tsqlParser.CONCAT - 211)) | (1 << (tsqlParser.CONTROL - 211)) | (1 << (tsqlParser.COOKIE - 211)) | (1 << (tsqlParser.COUNT - 211)) | (1 << (tsqlParser.COUNT_BIG - 211)) | (1 << (tsqlParser.DELAY - 211)) | (1 << (tsqlParser.DELETED - 211)))) !== 0) || ((((_la - 243)) & ~0x1f) == 0 && ((1 << (_la - 243)) & ((1 << (tsqlParser.DENSE_RANK - 243)) | (1 << (tsqlParser.DISABLE - 243)) | (1 << (tsqlParser.DYNAMIC - 243)) | (1 << (tsqlParser.ENCRYPTION - 243)) | (1 << (tsqlParser.EXPAND - 243)) | (1 << (tsqlParser.FAST - 243)) | (1 << (tsqlParser.FAST_FORWARD - 243)) | (1 << (tsqlParser.FIRST - 243)) | (1 << (tsqlParser.FOLLOWING - 243)) | (1 << (tsqlParser.FORCE - 243)) | (1 << (tsqlParser.FORCED - 243)) | (1 << (tsqlParser.FORWARD_ONLY - 243)) | (1 << (tsqlParser.FULLSCAN - 243)) | (1 << (tsqlParser.GLOBAL - 243)) | (1 << (tsqlParser.GO - 243)) | (1 << (tsqlParser.GROUPING - 243)) | (1 << (tsqlParser.GROUPING_ID - 243)) | (1 << (tsqlParser.HASH - 243)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 243)))) !== 0) || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (tsqlParser.IMPERSONATE - 276)) | (1 << (tsqlParser.INSENSITIVE - 276)) | (1 << (tsqlParser.INSERTED - 276)) | (1 << (tsqlParser.ISOLATION - 276)) | (1 << (tsqlParser.KEEP - 276)) | (1 << (tsqlParser.KEEPFIXED - 276)) | (1 << (tsqlParser.KEYSET - 276)) | (1 << (tsqlParser.LAST - 276)) | (1 << (tsqlParser.LEVEL - 276)) | (1 << (tsqlParser.LOCAL - 276)) | (1 << (tsqlParser.LOCK_ESCALATION - 276)) | (1 << (tsqlParser.LOGIN - 276)) | (1 << (tsqlParser.LOOP - 276)) | (1 << (tsqlParser.MARK - 276)) | (1 << (tsqlParser.MAX - 276)) | (1 << (tsqlParser.MAXDOP - 276)) | (1 << (tsqlParser.MAXRECURSION - 276)) | (1 << (tsqlParser.MIN - 276)) | (1 << (tsqlParser.MODIFY - 276)) | (1 << (tsqlParser.NAME - 276)) | (1 << (tsqlParser.NEXT - 276)))) !== 0) || ((((_la - 308)) & ~0x1f) == 0 && ((1 << (_la - 308)) & ((1 << (tsqlParser.NOCOUNT - 308)) | (1 << (tsqlParser.NOEXPAND - 308)) | (1 << (tsqlParser.NORECOMPUTE - 308)) | (1 << (tsqlParser.NTILE - 308)) | (1 << (tsqlParser.NUMBER - 308)) | (1 << (tsqlParser.OFFSET - 308)) | (1 << (tsqlParser.ONLINE - 308)) | (1 << (tsqlParser.ONLY - 308)) | (1 << (tsqlParser.OPTIMISTIC - 308)) | (1 << (tsqlParser.OPTIMIZE - 308)) | (1 << (tsqlParser.OUT - 308)) | (1 << (tsqlParser.OUTPUT - 308)) | (1 << (tsqlParser.OWNER - 308)) | (1 << (tsqlParser.PARAMETERIZATION - 308)) | (1 << (tsqlParser.PARTITION - 308)) | (1 << (tsqlParser.PATH - 308)) | (1 << (tsqlParser.PRECEDING - 308)) | (1 << (tsqlParser.PRIOR - 308)) | (1 << (tsqlParser.PRIVILEGES - 308)) | (1 << (tsqlParser.RANGE - 308)) | (1 << (tsqlParser.RANK - 308)) | (1 << (tsqlParser.READONLY - 308)) | (1 << (tsqlParser.READ_ONLY - 308)) | (1 << (tsqlParser.RECOMPILE - 308)))) !== 0) || ((((_la - 342)) & ~0x1f) == 0 && ((1 << (_la - 342)) & ((1 << (tsqlParser.RELATIVE - 342)) | (1 << (tsqlParser.REMOTE - 342)) | (1 << (tsqlParser.REPEATABLE - 342)) | (1 << (tsqlParser.ROBUST - 342)) | (1 << (tsqlParser.ROOT - 342)) | (1 << (tsqlParser.ROW - 342)) | (1 << (tsqlParser.ROWGUID - 342)) | (1 << (tsqlParser.ROWS - 342)) | (1 << (tsqlParser.ROW_NUMBER - 342)) | (1 << (tsqlParser.SAMPLE - 342)) | (1 << (tsqlParser.SCHEMABINDING - 342)) | (1 << (tsqlParser.SCROLL - 342)) | (1 << (tsqlParser.SCROLL_LOCKS - 342)) | (1 << (tsqlParser.SELF - 342)) | (1 << (tsqlParser.SERIALIZABLE - 342)) | (1 << (tsqlParser.SIMPLE - 342)) | (1 << (tsqlParser.SIZE - 342)) | (1 << (tsqlParser.SNAPSHOT - 342)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 342)) | (1 << (tsqlParser.STATIC - 342)) | (1 << (tsqlParser.STATS_STREAM - 342)) | (1 << (tsqlParser.STDEV - 342)) | (1 << (tsqlParser.STDEVP - 342)) | (1 << (tsqlParser.SUM - 342)) | (1 << (tsqlParser.TEXTIMAGE_ON - 342)))) !== 0) || ((((_la - 374)) & ~0x1f) == 0 && ((1 << (_la - 374)) & ((1 << (tsqlParser.THROW - 374)) | (1 << (tsqlParser.TIES - 374)) | (1 << (tsqlParser.TIME - 374)) | (1 << (tsqlParser.TRY - 374)) | (1 << (tsqlParser.TYPE - 374)) | (1 << (tsqlParser.TYPE_WARNING - 374)) | (1 << (tsqlParser.UNBOUNDED - 374)) | (1 << (tsqlParser.UNCOMMITTED - 374)) | (1 << (tsqlParser.UNKNOWN - 374)) | (1 << (tsqlParser.USING - 374)) | (1 << (tsqlParser.VAR - 374)) | (1 << (tsqlParser.VARP - 374)) | (1 << (tsqlParser.VIEWS - 374)) | (1 << (tsqlParser.VIEW_METADATA - 374)) | (1 << (tsqlParser.WORK - 374)) | (1 << (tsqlParser.XML - 374)) | (1 << (tsqlParser.XMLNAMESPACES - 374)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 374)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 374)) | (1 << (tsqlParser.ID - 374)))) !== 0) || _la===tsqlParser.LR_BRACKET) {
                this.state = 445;
                localctx.try_clauses = this.sql_clauses();
            }

            this.state = 448;
            this.match(tsqlParser.END);
            this.state = 449;
            this.match(tsqlParser.TRY);
            this.state = 451;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.SEMI) {
                this.state = 450;
                this.match(tsqlParser.SEMI);
            }

            this.state = 453;
            this.match(tsqlParser.BEGIN);
            this.state = 454;
            this.match(tsqlParser.CATCH);
            this.state = 456;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.SEMI) {
                this.state = 455;
                this.match(tsqlParser.SEMI);
            }

            this.state = 459;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if((((_la) & ~0x1f) == 0 && ((1 << _la) & ((1 << tsqlParser.ALTER) | (1 << tsqlParser.BEGIN) | (1 << tsqlParser.BREAK) | (1 << tsqlParser.CLOSE) | (1 << tsqlParser.COMMIT))) !== 0) || ((((_la - 34)) & ~0x1f) == 0 && ((1 << (_la - 34)) & ((1 << (tsqlParser.CONTINUE - 34)) | (1 << (tsqlParser.CREATE - 34)) | (1 << (tsqlParser.DEALLOCATE - 34)) | (1 << (tsqlParser.DECLARE - 34)) | (1 << (tsqlParser.DELETE - 34)) | (1 << (tsqlParser.DROP - 34)) | (1 << (tsqlParser.EXECUTE - 34)))) !== 0) || ((((_la - 67)) & ~0x1f) == 0 && ((1 << (_la - 67)) & ((1 << (tsqlParser.FETCH - 67)) | (1 << (tsqlParser.FORCESEEK - 67)) | (1 << (tsqlParser.GOTO - 67)) | (1 << (tsqlParser.GRANT - 67)) | (1 << (tsqlParser.IF - 67)) | (1 << (tsqlParser.INSERT - 67)))) !== 0) || ((((_la - 114)) & ~0x1f) == 0 && ((1 << (_la - 114)) & ((1 << (tsqlParser.OPEN - 114)) | (1 << (tsqlParser.PRINT - 114)) | (1 << (tsqlParser.RAISERROR - 114)) | (1 << (tsqlParser.RETURN - 114)) | (1 << (tsqlParser.REVERT - 114)))) !== 0) || ((((_la - 146)) & ~0x1f) == 0 && ((1 << (_la - 146)) & ((1 << (tsqlParser.ROLLBACK - 146)) | (1 << (tsqlParser.SAVE - 146)) | (1 << (tsqlParser.SELECT - 146)) | (1 << (tsqlParser.SET - 146)))) !== 0) || ((((_la - 179)) & ~0x1f) == 0 && ((1 << (_la - 179)) & ((1 << (tsqlParser.UPDATE - 179)) | (1 << (tsqlParser.USE - 179)) | (1 << (tsqlParser.WAITFOR - 179)) | (1 << (tsqlParser.WHILE - 179)) | (1 << (tsqlParser.WITH - 179)) | (1 << (tsqlParser.ABSOLUTE - 179)) | (1 << (tsqlParser.APPLY - 179)) | (1 << (tsqlParser.AUTO - 179)) | (1 << (tsqlParser.AVG - 179)))) !== 0) || ((((_la - 211)) & ~0x1f) == 0 && ((1 << (_la - 211)) & ((1 << (tsqlParser.BASE64 - 211)) | (1 << (tsqlParser.CALLER - 211)) | (1 << (tsqlParser.CAST - 211)) | (1 << (tsqlParser.CATCH - 211)) | (1 << (tsqlParser.CHECKSUM_AGG - 211)) | (1 << (tsqlParser.COMMITTED - 211)) | (1 << (tsqlParser.CONCAT - 211)) | (1 << (tsqlParser.CONTROL - 211)) | (1 << (tsqlParser.COOKIE - 211)) | (1 << (tsqlParser.COUNT - 211)) | (1 << (tsqlParser.COUNT_BIG - 211)) | (1 << (tsqlParser.DELAY - 211)) | (1 << (tsqlParser.DELETED - 211)))) !== 0) || ((((_la - 243)) & ~0x1f) == 0 && ((1 << (_la - 243)) & ((1 << (tsqlParser.DENSE_RANK - 243)) | (1 << (tsqlParser.DISABLE - 243)) | (1 << (tsqlParser.DYNAMIC - 243)) | (1 << (tsqlParser.ENCRYPTION - 243)) | (1 << (tsqlParser.EXPAND - 243)) | (1 << (tsqlParser.FAST - 243)) | (1 << (tsqlParser.FAST_FORWARD - 243)) | (1 << (tsqlParser.FIRST - 243)) | (1 << (tsqlParser.FOLLOWING - 243)) | (1 << (tsqlParser.FORCE - 243)) | (1 << (tsqlParser.FORCED - 243)) | (1 << (tsqlParser.FORWARD_ONLY - 243)) | (1 << (tsqlParser.FULLSCAN - 243)) | (1 << (tsqlParser.GLOBAL - 243)) | (1 << (tsqlParser.GO - 243)) | (1 << (tsqlParser.GROUPING - 243)) | (1 << (tsqlParser.GROUPING_ID - 243)) | (1 << (tsqlParser.HASH - 243)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 243)))) !== 0) || ((((_la - 276)) & ~0x1f) == 0 && ((1 << (_la - 276)) & ((1 << (tsqlParser.IMPERSONATE - 276)) | (1 << (tsqlParser.INSENSITIVE - 276)) | (1 << (tsqlParser.INSERTED - 276)) | (1 << (tsqlParser.ISOLATION - 276)) | (1 << (tsqlParser.KEEP - 276)) | (1 << (tsqlParser.KEEPFIXED - 276)) | (1 << (tsqlParser.KEYSET - 276)) | (1 << (tsqlParser.LAST - 276)) | (1 << (tsqlParser.LEVEL - 276)) | (1 << (tsqlParser.LOCAL - 276)) | (1 << (tsqlParser.LOCK_ESCALATION - 276)) | (1 << (tsqlParser.LOGIN - 276)) | (1 << (tsqlParser.LOOP - 276)) | (1 << (tsqlParser.MARK - 276)) | (1 << (tsqlParser.MAX - 276)) | (1 << (tsqlParser.MAXDOP - 276)) | (1 << (tsqlParser.MAXRECURSION - 276)) | (1 << (tsqlParser.MIN - 276)) | (1 << (tsqlParser.MODIFY - 276)) | (1 << (tsqlParser.NAME - 276)) | (1 << (tsqlParser.NEXT - 276)))) !== 0) || ((((_la - 308)) & ~0x1f) == 0 && ((1 << (_la - 308)) & ((1 << (tsqlParser.NOCOUNT - 308)) | (1 << (tsqlParser.NOEXPAND - 308)) | (1 << (tsqlParser.NORECOMPUTE - 308)) | (1 << (tsqlParser.NTILE - 308)) | (1 << (tsqlParser.NUMBER - 308)) | (1 << (tsqlParser.OFFSET - 308)) | (1 << (tsqlParser.ONLINE - 308)) | (1 << (tsqlParser.ONLY - 308)) | (1 << (tsqlParser.OPTIMISTIC - 308)) | (1 << (tsqlParser.OPTIMIZE - 308)) | (1 << (tsqlParser.OUT - 308)) | (1 << (tsqlParser.OUTPUT - 308)) | (1 << (tsqlParser.OWNER - 308)) | (1 << (tsqlParser.PARAMETERIZATION - 308)) | (1 << (tsqlParser.PARTITION - 308)) | (1 << (tsqlParser.PATH - 308)) | (1 << (tsqlParser.PRECEDING - 308)) | (1 << (tsqlParser.PRIOR - 308)) | (1 << (tsqlParser.PRIVILEGES - 308)) | (1 << (tsqlParser.RANGE - 308)) | (1 << (tsqlParser.RANK - 308)) | (1 << (tsqlParser.READONLY - 308)) | (1 << (tsqlParser.READ_ONLY - 308)) | (1 << (tsqlParser.RECOMPILE - 308)))) !== 0) || ((((_la - 342)) & ~0x1f) == 0 && ((1 << (_la - 342)) & ((1 << (tsqlParser.RELATIVE - 342)) | (1 << (tsqlParser.REMOTE - 342)) | (1 << (tsqlParser.REPEATABLE - 342)) | (1 << (tsqlParser.ROBUST - 342)) | (1 << (tsqlParser.ROOT - 342)) | (1 << (tsqlParser.ROW - 342)) | (1 << (tsqlParser.ROWGUID - 342)) | (1 << (tsqlParser.ROWS - 342)) | (1 << (tsqlParser.ROW_NUMBER - 342)) | (1 << (tsqlParser.SAMPLE - 342)) | (1 << (tsqlParser.SCHEMABINDING - 342)) | (1 << (tsqlParser.SCROLL - 342)) | (1 << (tsqlParser.SCROLL_LOCKS - 342)) | (1 << (tsqlParser.SELF - 342)) | (1 << (tsqlParser.SERIALIZABLE - 342)) | (1 << (tsqlParser.SIMPLE - 342)) | (1 << (tsqlParser.SIZE - 342)) | (1 << (tsqlParser.SNAPSHOT - 342)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 342)) | (1 << (tsqlParser.STATIC - 342)) | (1 << (tsqlParser.STATS_STREAM - 342)) | (1 << (tsqlParser.STDEV - 342)) | (1 << (tsqlParser.STDEVP - 342)) | (1 << (tsqlParser.SUM - 342)) | (1 << (tsqlParser.TEXTIMAGE_ON - 342)))) !== 0) || ((((_la - 374)) & ~0x1f) == 0 && ((1 << (_la - 374)) & ((1 << (tsqlParser.THROW - 374)) | (1 << (tsqlParser.TIES - 374)) | (1 << (tsqlParser.TIME - 374)) | (1 << (tsqlParser.TRY - 374)) | (1 << (tsqlParser.TYPE - 374)) | (1 << (tsqlParser.TYPE_WARNING - 374)) | (1 << (tsqlParser.UNBOUNDED - 374)) | (1 << (tsqlParser.UNCOMMITTED - 374)) | (1 << (tsqlParser.UNKNOWN - 374)) | (1 << (tsqlParser.USING - 374)) | (1 << (tsqlParser.VAR - 374)) | (1 << (tsqlParser.VARP - 374)) | (1 << (tsqlParser.VIEWS - 374)) | (1 << (tsqlParser.VIEW_METADATA - 374)) | (1 << (tsqlParser.WORK - 374)) | (1 << (tsqlParser.XML - 374)) | (1 << (tsqlParser.XMLNAMESPACES - 374)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 374)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 374)) | (1 << (tsqlParser.ID - 374)))) !== 0) || _la===tsqlParser.LR_BRACKET) {
                this.state = 458;
                localctx.catch_clauses = this.sql_clauses();
            }

            this.state = 461;
            this.match(tsqlParser.END);
            this.state = 462;
            this.match(tsqlParser.CATCH);
            this.state = 464;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,25,this._ctx);
            if(la_===1) {
                this.state = 463;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 10:
            localctx = new Waitfor_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 466;
            this.match(tsqlParser.WAITFOR);
            this.state = 467;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.DELAY || _la===tsqlParser.TIME)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 468;
            this.expression(0);
            this.state = 470;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,26,this._ctx);
            if(la_===1) {
                this.state = 469;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 11:
            localctx = new While_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 472;
            this.match(tsqlParser.WHILE);
            this.state = 473;
            this.search_condition(0);
            this.state = 483;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,29,this._ctx);
            switch(la_) {
            case 1:
                this.state = 474;
                this.sql_clause();
                break;

            case 2:
                this.state = 475;
                this.match(tsqlParser.BREAK);
                this.state = 477;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,27,this._ctx);
                if(la_===1) {
                    this.state = 476;
                    this.match(tsqlParser.SEMI);

                }
                break;

            case 3:
                this.state = 479;
                this.match(tsqlParser.CONTINUE);
                this.state = 481;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,28,this._ctx);
                if(la_===1) {
                    this.state = 480;
                    this.match(tsqlParser.SEMI);

                }
                break;

            }
            break;

        case 12:
            localctx = new Print_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 485;
            this.match(tsqlParser.PRINT);
            this.state = 486;
            this.expression(0);
            this.state = 488;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,30,this._ctx);
            if(la_===1) {
                this.state = 487;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 13:
            localctx = new Raiseerror_statementContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 490;
            this.match(tsqlParser.RAISERROR);
            this.state = 491;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 492;
            localctx.msg = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(((((_la - 402)) & ~0x1f) == 0 && ((1 << (_la - 402)) & ((1 << (tsqlParser.LOCAL_ID - 402)) | (1 << (tsqlParser.DECIMAL - 402)) | (1 << (tsqlParser.STRING - 402)))) !== 0))) {
                localctx.msg = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 493;
            this.match(tsqlParser.COMMA);
            this.state = 494;
            localctx.severity = this.constant_LOCAL_ID();
            this.state = 495;
            this.match(tsqlParser.COMMA);
            this.state = 496;
            localctx.state = this.constant_LOCAL_ID();
            this.state = 501;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 497;
                this.match(tsqlParser.COMMA);
                this.state = 498;
                this.constant_LOCAL_ID();
                this.state = 503;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 504;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 506;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,32,this._ctx);
            if(la_===1) {
                this.state = 505;
                this.match(tsqlParser.SEMI);

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Another_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_another_statement;
    return this;
}

Another_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Another_statementContext.prototype.constructor = Another_statementContext;

Another_statementContext.prototype.declare_statement = function() {
    return this.getTypedRuleContext(Declare_statementContext,0);
};

Another_statementContext.prototype.cursor_statement = function() {
    return this.getTypedRuleContext(Cursor_statementContext,0);
};

Another_statementContext.prototype.execute_statement = function() {
    return this.getTypedRuleContext(Execute_statementContext,0);
};

Another_statementContext.prototype.security_statement = function() {
    return this.getTypedRuleContext(Security_statementContext,0);
};

Another_statementContext.prototype.set_statement = function() {
    return this.getTypedRuleContext(Set_statementContext,0);
};

Another_statementContext.prototype.transaction_statement = function() {
    return this.getTypedRuleContext(Transaction_statementContext,0);
};

Another_statementContext.prototype.use_statement = function() {
    return this.getTypedRuleContext(Use_statementContext,0);
};

Another_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAnother_statement(this);
	}
};

Another_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAnother_statement(this);
	}
};




tsqlParser.Another_statementContext = Another_statementContext;

tsqlParser.prototype.another_statement = function() {

    var localctx = new Another_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 14, tsqlParser.RULE_another_statement);
    try {
        this.state = 517;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,34,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 510;
            this.declare_statement();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 511;
            this.cursor_statement();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 512;
            this.execute_statement();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 513;
            this.security_statement();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 514;
            this.set_statement();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 515;
            this.transaction_statement();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 516;
            this.use_statement();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Delete_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_delete_statement;
    this.cursor_var = null; // Token
    return this;
}

Delete_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Delete_statementContext.prototype.constructor = Delete_statementContext;

Delete_statementContext.prototype.DELETE = function() {
    return this.getToken(tsqlParser.DELETE, 0);
};

Delete_statementContext.prototype.delete_statement_from = function() {
    return this.getTypedRuleContext(Delete_statement_fromContext,0);
};

Delete_statementContext.prototype.with_expression = function() {
    return this.getTypedRuleContext(With_expressionContext,0);
};

Delete_statementContext.prototype.TOP = function() {
    return this.getToken(tsqlParser.TOP, 0);
};

Delete_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Delete_statementContext.prototype.FROM = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.FROM);
    } else {
        return this.getToken(tsqlParser.FROM, i);
    }
};


Delete_statementContext.prototype.insert_with_table_hints = function() {
    return this.getTypedRuleContext(Insert_with_table_hintsContext,0);
};

Delete_statementContext.prototype.output_clause = function() {
    return this.getTypedRuleContext(Output_clauseContext,0);
};

Delete_statementContext.prototype.table_sources = function() {
    return this.getTypedRuleContext(Table_sourcesContext,0);
};

Delete_statementContext.prototype.WHERE = function() {
    return this.getToken(tsqlParser.WHERE, 0);
};

Delete_statementContext.prototype.for_clause = function() {
    return this.getTypedRuleContext(For_clauseContext,0);
};

Delete_statementContext.prototype.option_clause = function() {
    return this.getTypedRuleContext(Option_clauseContext,0);
};

Delete_statementContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

Delete_statementContext.prototype.CURRENT = function() {
    return this.getToken(tsqlParser.CURRENT, 0);
};

Delete_statementContext.prototype.OF = function() {
    return this.getToken(tsqlParser.OF, 0);
};

Delete_statementContext.prototype.PERCENT = function() {
    return this.getToken(tsqlParser.PERCENT, 0);
};

Delete_statementContext.prototype.cursor_name = function() {
    return this.getTypedRuleContext(Cursor_nameContext,0);
};

Delete_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Delete_statementContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Delete_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDelete_statement(this);
	}
};

Delete_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDelete_statement(this);
	}
};




tsqlParser.Delete_statementContext = Delete_statementContext;

tsqlParser.prototype.delete_statement = function() {

    var localctx = new Delete_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 16, tsqlParser.RULE_delete_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 520;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 519;
            this.with_expression();
        }

        this.state = 522;
        this.match(tsqlParser.DELETE);
        this.state = 530;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.TOP) {
            this.state = 523;
            this.match(tsqlParser.TOP);
            this.state = 524;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 525;
            this.expression(0);
            this.state = 526;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 528;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PERCENT) {
                this.state = 527;
                this.match(tsqlParser.PERCENT);
            }

        }

        this.state = 533;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FROM) {
            this.state = 532;
            this.match(tsqlParser.FROM);
        }

        this.state = 535;
        this.delete_statement_from();
        this.state = 537;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,39,this._ctx);
        if(la_===1) {
            this.state = 536;
            this.insert_with_table_hints();

        }
        this.state = 540;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,40,this._ctx);
        if(la_===1) {
            this.state = 539;
            this.output_clause();

        }
        this.state = 544;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FROM) {
            this.state = 542;
            this.match(tsqlParser.FROM);
            this.state = 543;
            this.table_sources();
        }

        this.state = 559;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WHERE) {
            this.state = 546;
            this.match(tsqlParser.WHERE);
            this.state = 557;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.CASE:
            case tsqlParser.COALESCE:
            case tsqlParser.CONVERT:
            case tsqlParser.CURRENT_TIMESTAMP:
            case tsqlParser.CURRENT_USER:
            case tsqlParser.DEFAULT:
            case tsqlParser.EXISTS:
            case tsqlParser.FORCESEEK:
            case tsqlParser.IDENTITY:
            case tsqlParser.LEFT:
            case tsqlParser.NOT:
            case tsqlParser.NULL:
            case tsqlParser.NULLIF:
            case tsqlParser.OVER:
            case tsqlParser.RIGHT:
            case tsqlParser.SESSION_USER:
            case tsqlParser.SYSTEM_USER:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.BINARY_CHECKSUM:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DATEADD:
            case tsqlParser.DATEDIFF:
            case tsqlParser.DATENAME:
            case tsqlParser.DATEPART:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MIN_ACTIVE_ROWVERSION:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.LOCAL_ID:
            case tsqlParser.DECIMAL:
            case tsqlParser.ID:
            case tsqlParser.STRING:
            case tsqlParser.BINARY:
            case tsqlParser.FLOAT:
            case tsqlParser.REAL:
            case tsqlParser.DOLLAR:
            case tsqlParser.LR_BRACKET:
            case tsqlParser.PLUS:
            case tsqlParser.MINUS:
            case tsqlParser.BIT_NOT:
                this.state = 547;
                this.search_condition(0);
                break;
            case tsqlParser.CURRENT:
                this.state = 548;
                this.match(tsqlParser.CURRENT);
                this.state = 549;
                this.match(tsqlParser.OF);
                this.state = 555;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,43,this._ctx);
                switch(la_) {
                case 1:
                    this.state = 551;
                    this._errHandler.sync(this);
                    var la_ = this._interp.adaptivePredict(this._input,42,this._ctx);
                    if(la_===1) {
                        this.state = 550;
                        this.match(tsqlParser.GLOBAL);

                    }
                    this.state = 553;
                    this.cursor_name();
                    break;

                case 2:
                    this.state = 554;
                    localctx.cursor_var = this.match(tsqlParser.LOCAL_ID);
                    break;

                }
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
        }

        this.state = 562;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FOR) {
            this.state = 561;
            this.for_clause();
        }

        this.state = 565;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.OPTION) {
            this.state = 564;
            this.option_clause();
        }

        this.state = 568;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,48,this._ctx);
        if(la_===1) {
            this.state = 567;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Delete_statement_fromContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_delete_statement_from;
    this.table_var = null; // Token
    return this;
}

Delete_statement_fromContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Delete_statement_fromContext.prototype.constructor = Delete_statement_fromContext;

Delete_statement_fromContext.prototype.table_alias = function() {
    return this.getTypedRuleContext(Table_aliasContext,0);
};

Delete_statement_fromContext.prototype.ddl_object = function() {
    return this.getTypedRuleContext(Ddl_objectContext,0);
};

Delete_statement_fromContext.prototype.rowset_function_limited = function() {
    return this.getTypedRuleContext(Rowset_function_limitedContext,0);
};

Delete_statement_fromContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Delete_statement_fromContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDelete_statement_from(this);
	}
};

Delete_statement_fromContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDelete_statement_from(this);
	}
};




tsqlParser.Delete_statement_fromContext = Delete_statement_fromContext;

tsqlParser.prototype.delete_statement_from = function() {

    var localctx = new Delete_statement_fromContext(this, this._ctx, this.state);
    this.enterRule(localctx, 18, tsqlParser.RULE_delete_statement_from);
    try {
        this.state = 574;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,49,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 570;
            this.table_alias();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 571;
            this.ddl_object();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 572;
            this.rowset_function_limited();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 573;
            localctx.table_var = this.match(tsqlParser.LOCAL_ID);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Insert_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_insert_statement;
    return this;
}

Insert_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Insert_statementContext.prototype.constructor = Insert_statementContext;

Insert_statementContext.prototype.INSERT = function() {
    return this.getToken(tsqlParser.INSERT, 0);
};

Insert_statementContext.prototype.insert_statement_value = function() {
    return this.getTypedRuleContext(Insert_statement_valueContext,0);
};

Insert_statementContext.prototype.ddl_object = function() {
    return this.getTypedRuleContext(Ddl_objectContext,0);
};

Insert_statementContext.prototype.rowset_function_limited = function() {
    return this.getTypedRuleContext(Rowset_function_limitedContext,0);
};

Insert_statementContext.prototype.with_expression = function() {
    return this.getTypedRuleContext(With_expressionContext,0);
};

Insert_statementContext.prototype.TOP = function() {
    return this.getToken(tsqlParser.TOP, 0);
};

Insert_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Insert_statementContext.prototype.INTO = function() {
    return this.getToken(tsqlParser.INTO, 0);
};

Insert_statementContext.prototype.insert_with_table_hints = function() {
    return this.getTypedRuleContext(Insert_with_table_hintsContext,0);
};

Insert_statementContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Insert_statementContext.prototype.output_clause = function() {
    return this.getTypedRuleContext(Output_clauseContext,0);
};

Insert_statementContext.prototype.for_clause = function() {
    return this.getTypedRuleContext(For_clauseContext,0);
};

Insert_statementContext.prototype.option_clause = function() {
    return this.getTypedRuleContext(Option_clauseContext,0);
};

Insert_statementContext.prototype.PERCENT = function() {
    return this.getToken(tsqlParser.PERCENT, 0);
};

Insert_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterInsert_statement(this);
	}
};

Insert_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitInsert_statement(this);
	}
};




tsqlParser.Insert_statementContext = Insert_statementContext;

tsqlParser.prototype.insert_statement = function() {

    var localctx = new Insert_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 20, tsqlParser.RULE_insert_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 577;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 576;
            this.with_expression();
        }

        this.state = 579;
        this.match(tsqlParser.INSERT);
        this.state = 587;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.TOP) {
            this.state = 580;
            this.match(tsqlParser.TOP);
            this.state = 581;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 582;
            this.expression(0);
            this.state = 583;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 585;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PERCENT) {
                this.state = 584;
                this.match(tsqlParser.PERCENT);
            }

        }

        this.state = 590;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.INTO) {
            this.state = 589;
            this.match(tsqlParser.INTO);
        }

        this.state = 594;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.LOCAL_ID:
        case tsqlParser.ID:
            this.state = 592;
            this.ddl_object();
            break;
        case tsqlParser.OPENDATASOURCE:
        case tsqlParser.OPENQUERY:
            this.state = 593;
            this.rowset_function_limited();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 597;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,55,this._ctx);
        if(la_===1) {
            this.state = 596;
            this.insert_with_table_hints();

        }
        this.state = 603;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,56,this._ctx);
        if(la_===1) {
            this.state = 599;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 600;
            this.column_name_list();
            this.state = 601;
            this.match(tsqlParser.RR_BRACKET);

        }
        this.state = 606;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.OUTPUT) {
            this.state = 605;
            this.output_clause();
        }

        this.state = 608;
        this.insert_statement_value();
        this.state = 610;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FOR) {
            this.state = 609;
            this.for_clause();
        }

        this.state = 613;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.OPTION) {
            this.state = 612;
            this.option_clause();
        }

        this.state = 616;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,60,this._ctx);
        if(la_===1) {
            this.state = 615;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Insert_statement_valueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_insert_statement_value;
    return this;
}

Insert_statement_valueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Insert_statement_valueContext.prototype.constructor = Insert_statement_valueContext;

Insert_statement_valueContext.prototype.table_value_constructor = function() {
    return this.getTypedRuleContext(Table_value_constructorContext,0);
};

Insert_statement_valueContext.prototype.derived_table = function() {
    return this.getTypedRuleContext(Derived_tableContext,0);
};

Insert_statement_valueContext.prototype.execute_statement = function() {
    return this.getTypedRuleContext(Execute_statementContext,0);
};

Insert_statement_valueContext.prototype.DEFAULT = function() {
    return this.getToken(tsqlParser.DEFAULT, 0);
};

Insert_statement_valueContext.prototype.VALUES = function() {
    return this.getToken(tsqlParser.VALUES, 0);
};

Insert_statement_valueContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterInsert_statement_value(this);
	}
};

Insert_statement_valueContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitInsert_statement_value(this);
	}
};




tsqlParser.Insert_statement_valueContext = Insert_statement_valueContext;

tsqlParser.prototype.insert_statement_value = function() {

    var localctx = new Insert_statement_valueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 22, tsqlParser.RULE_insert_statement_value);
    try {
        this.state = 623;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.VALUES:
            this.enterOuterAlt(localctx, 1);
            this.state = 618;
            this.table_value_constructor();
            break;
        case tsqlParser.SELECT:
        case tsqlParser.WITH:
        case tsqlParser.LR_BRACKET:
            this.enterOuterAlt(localctx, 2);
            this.state = 619;
            this.derived_table();
            break;
        case tsqlParser.EXECUTE:
            this.enterOuterAlt(localctx, 3);
            this.state = 620;
            this.execute_statement();
            break;
        case tsqlParser.DEFAULT:
            this.enterOuterAlt(localctx, 4);
            this.state = 621;
            this.match(tsqlParser.DEFAULT);
            this.state = 622;
            this.match(tsqlParser.VALUES);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Select_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_select_statement;
    return this;
}

Select_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Select_statementContext.prototype.constructor = Select_statementContext;

Select_statementContext.prototype.query_expression = function() {
    return this.getTypedRuleContext(Query_expressionContext,0);
};

Select_statementContext.prototype.with_expression = function() {
    return this.getTypedRuleContext(With_expressionContext,0);
};

Select_statementContext.prototype.order_by_clause = function() {
    return this.getTypedRuleContext(Order_by_clauseContext,0);
};

Select_statementContext.prototype.for_clause = function() {
    return this.getTypedRuleContext(For_clauseContext,0);
};

Select_statementContext.prototype.option_clause = function() {
    return this.getTypedRuleContext(Option_clauseContext,0);
};

Select_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSelect_statement(this);
	}
};

Select_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSelect_statement(this);
	}
};




tsqlParser.Select_statementContext = Select_statementContext;

tsqlParser.prototype.select_statement = function() {

    var localctx = new Select_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 24, tsqlParser.RULE_select_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 626;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 625;
            this.with_expression();
        }

        this.state = 628;
        this.query_expression();
        this.state = 630;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,63,this._ctx);
        if(la_===1) {
            this.state = 629;
            this.order_by_clause();

        }
        this.state = 633;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,64,this._ctx);
        if(la_===1) {
            this.state = 632;
            this.for_clause();

        }
        this.state = 636;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,65,this._ctx);
        if(la_===1) {
            this.state = 635;
            this.option_clause();

        }
        this.state = 639;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,66,this._ctx);
        if(la_===1) {
            this.state = 638;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Update_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_update_statement;
    this.cursor_var = null; // Token
    return this;
}

Update_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Update_statementContext.prototype.constructor = Update_statementContext;

Update_statementContext.prototype.UPDATE = function() {
    return this.getToken(tsqlParser.UPDATE, 0);
};

Update_statementContext.prototype.SET = function() {
    return this.getToken(tsqlParser.SET, 0);
};

Update_statementContext.prototype.update_elem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Update_elemContext);
    } else {
        return this.getTypedRuleContext(Update_elemContext,i);
    }
};

Update_statementContext.prototype.ddl_object = function() {
    return this.getTypedRuleContext(Ddl_objectContext,0);
};

Update_statementContext.prototype.rowset_function_limited = function() {
    return this.getTypedRuleContext(Rowset_function_limitedContext,0);
};

Update_statementContext.prototype.with_expression = function() {
    return this.getTypedRuleContext(With_expressionContext,0);
};

Update_statementContext.prototype.TOP = function() {
    return this.getToken(tsqlParser.TOP, 0);
};

Update_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Update_statementContext.prototype.with_table_hints = function() {
    return this.getTypedRuleContext(With_table_hintsContext,0);
};

Update_statementContext.prototype.output_clause = function() {
    return this.getTypedRuleContext(Output_clauseContext,0);
};

Update_statementContext.prototype.FROM = function() {
    return this.getToken(tsqlParser.FROM, 0);
};

Update_statementContext.prototype.table_sources = function() {
    return this.getTypedRuleContext(Table_sourcesContext,0);
};

Update_statementContext.prototype.WHERE = function() {
    return this.getToken(tsqlParser.WHERE, 0);
};

Update_statementContext.prototype.for_clause = function() {
    return this.getTypedRuleContext(For_clauseContext,0);
};

Update_statementContext.prototype.option_clause = function() {
    return this.getTypedRuleContext(Option_clauseContext,0);
};

Update_statementContext.prototype.search_condition_list = function() {
    return this.getTypedRuleContext(Search_condition_listContext,0);
};

Update_statementContext.prototype.CURRENT = function() {
    return this.getToken(tsqlParser.CURRENT, 0);
};

Update_statementContext.prototype.OF = function() {
    return this.getToken(tsqlParser.OF, 0);
};

Update_statementContext.prototype.PERCENT = function() {
    return this.getToken(tsqlParser.PERCENT, 0);
};

Update_statementContext.prototype.cursor_name = function() {
    return this.getTypedRuleContext(Cursor_nameContext,0);
};

Update_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Update_statementContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Update_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUpdate_statement(this);
	}
};

Update_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUpdate_statement(this);
	}
};




tsqlParser.Update_statementContext = Update_statementContext;

tsqlParser.prototype.update_statement = function() {

    var localctx = new Update_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 26, tsqlParser.RULE_update_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 642;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 641;
            this.with_expression();
        }

        this.state = 644;
        this.match(tsqlParser.UPDATE);
        this.state = 652;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.TOP) {
            this.state = 645;
            this.match(tsqlParser.TOP);
            this.state = 646;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 647;
            this.expression(0);
            this.state = 648;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 650;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PERCENT) {
                this.state = 649;
                this.match(tsqlParser.PERCENT);
            }

        }

        this.state = 656;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.LOCAL_ID:
        case tsqlParser.ID:
            this.state = 654;
            this.ddl_object();
            break;
        case tsqlParser.OPENDATASOURCE:
        case tsqlParser.OPENQUERY:
            this.state = 655;
            this.rowset_function_limited();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 659;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH || _la===tsqlParser.LR_BRACKET) {
            this.state = 658;
            this.with_table_hints();
        }

        this.state = 661;
        this.match(tsqlParser.SET);
        this.state = 662;
        this.update_elem();
        this.state = 667;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 663;
            this.match(tsqlParser.COMMA);
            this.state = 664;
            this.update_elem();
            this.state = 669;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 671;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,73,this._ctx);
        if(la_===1) {
            this.state = 670;
            this.output_clause();

        }
        this.state = 675;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FROM) {
            this.state = 673;
            this.match(tsqlParser.FROM);
            this.state = 674;
            this.table_sources();
        }

        this.state = 690;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WHERE) {
            this.state = 677;
            this.match(tsqlParser.WHERE);
            this.state = 688;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.CASE:
            case tsqlParser.COALESCE:
            case tsqlParser.CONVERT:
            case tsqlParser.CURRENT_TIMESTAMP:
            case tsqlParser.CURRENT_USER:
            case tsqlParser.DEFAULT:
            case tsqlParser.EXISTS:
            case tsqlParser.FORCESEEK:
            case tsqlParser.IDENTITY:
            case tsqlParser.LEFT:
            case tsqlParser.NOT:
            case tsqlParser.NULL:
            case tsqlParser.NULLIF:
            case tsqlParser.OVER:
            case tsqlParser.RIGHT:
            case tsqlParser.SESSION_USER:
            case tsqlParser.SYSTEM_USER:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.BINARY_CHECKSUM:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DATEADD:
            case tsqlParser.DATEDIFF:
            case tsqlParser.DATENAME:
            case tsqlParser.DATEPART:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MIN_ACTIVE_ROWVERSION:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.LOCAL_ID:
            case tsqlParser.DECIMAL:
            case tsqlParser.ID:
            case tsqlParser.STRING:
            case tsqlParser.BINARY:
            case tsqlParser.FLOAT:
            case tsqlParser.REAL:
            case tsqlParser.DOLLAR:
            case tsqlParser.LR_BRACKET:
            case tsqlParser.PLUS:
            case tsqlParser.MINUS:
            case tsqlParser.BIT_NOT:
                this.state = 678;
                this.search_condition_list();
                break;
            case tsqlParser.CURRENT:
                this.state = 679;
                this.match(tsqlParser.CURRENT);
                this.state = 680;
                this.match(tsqlParser.OF);
                this.state = 686;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,76,this._ctx);
                switch(la_) {
                case 1:
                    this.state = 682;
                    this._errHandler.sync(this);
                    var la_ = this._interp.adaptivePredict(this._input,75,this._ctx);
                    if(la_===1) {
                        this.state = 681;
                        this.match(tsqlParser.GLOBAL);

                    }
                    this.state = 684;
                    this.cursor_name();
                    break;

                case 2:
                    this.state = 685;
                    localctx.cursor_var = this.match(tsqlParser.LOCAL_ID);
                    break;

                }
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
        }

        this.state = 693;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FOR) {
            this.state = 692;
            this.for_clause();
        }

        this.state = 696;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.OPTION) {
            this.state = 695;
            this.option_clause();
        }

        this.state = 699;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,81,this._ctx);
        if(la_===1) {
            this.state = 698;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Output_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_output_clause;
    return this;
}

Output_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Output_clauseContext.prototype.constructor = Output_clauseContext;

Output_clauseContext.prototype.OUTPUT = function() {
    return this.getToken(tsqlParser.OUTPUT, 0);
};

Output_clauseContext.prototype.output_dml_list_elem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Output_dml_list_elemContext);
    } else {
        return this.getTypedRuleContext(Output_dml_list_elemContext,i);
    }
};

Output_clauseContext.prototype.INTO = function() {
    return this.getToken(tsqlParser.INTO, 0);
};

Output_clauseContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Output_clauseContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Output_clauseContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Output_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOutput_clause(this);
	}
};

Output_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOutput_clause(this);
	}
};




tsqlParser.Output_clauseContext = Output_clauseContext;

tsqlParser.prototype.output_clause = function() {

    var localctx = new Output_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 28, tsqlParser.RULE_output_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 701;
        this.match(tsqlParser.OUTPUT);
        this.state = 702;
        this.output_dml_list_elem();
        this.state = 707;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 703;
            this.match(tsqlParser.COMMA);
            this.state = 704;
            this.output_dml_list_elem();
            this.state = 709;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 721;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.INTO) {
            this.state = 710;
            this.match(tsqlParser.INTO);
            this.state = 713;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.LOCAL_ID:
                this.state = 711;
                this.match(tsqlParser.LOCAL_ID);
                break;
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 712;
                this.table_name();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 719;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,84,this._ctx);
            if(la_===1) {
                this.state = 715;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 716;
                this.column_name_list();
                this.state = 717;
                this.match(tsqlParser.RR_BRACKET);

            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Output_dml_list_elemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_output_dml_list_elem;
    return this;
}

Output_dml_list_elemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Output_dml_list_elemContext.prototype.constructor = Output_dml_list_elemContext;

Output_dml_list_elemContext.prototype.output_column_name = function() {
    return this.getTypedRuleContext(Output_column_nameContext,0);
};

Output_dml_list_elemContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Output_dml_list_elemContext.prototype.column_alias = function() {
    return this.getTypedRuleContext(Column_aliasContext,0);
};

Output_dml_list_elemContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Output_dml_list_elemContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOutput_dml_list_elem(this);
	}
};

Output_dml_list_elemContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOutput_dml_list_elem(this);
	}
};




tsqlParser.Output_dml_list_elemContext = Output_dml_list_elemContext;

tsqlParser.prototype.output_dml_list_elem = function() {

    var localctx = new Output_dml_list_elemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 30, tsqlParser.RULE_output_dml_list_elem);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 725;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,86,this._ctx);
        switch(la_) {
        case 1:
            this.state = 723;
            this.output_column_name();
            break;

        case 2:
            this.state = 724;
            this.expression(0);
            break;

        }
        this.state = 731;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,88,this._ctx);
        if(la_===1) {
            this.state = 728;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.AS) {
                this.state = 727;
                this.match(tsqlParser.AS);
            }

            this.state = 730;
            this.column_alias();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Output_column_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_output_column_name;
    return this;
}

Output_column_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Output_column_nameContext.prototype.constructor = Output_column_nameContext;

Output_column_nameContext.prototype.DELETED = function() {
    return this.getToken(tsqlParser.DELETED, 0);
};

Output_column_nameContext.prototype.INSERTED = function() {
    return this.getToken(tsqlParser.INSERTED, 0);
};

Output_column_nameContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Output_column_nameContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Output_column_nameContext.prototype.DOLLAR_ACTION = function() {
    return this.getToken(tsqlParser.DOLLAR_ACTION, 0);
};

Output_column_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOutput_column_name(this);
	}
};

Output_column_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOutput_column_name(this);
	}
};




tsqlParser.Output_column_nameContext = Output_column_nameContext;

tsqlParser.prototype.output_column_name = function() {

    var localctx = new Output_column_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 32, tsqlParser.RULE_output_column_name);
    try {
        this.state = 744;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 736;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,89,this._ctx);
            switch(la_) {
            case 1:
                this.state = 733;
                this.match(tsqlParser.DELETED);
                break;

            case 2:
                this.state = 734;
                this.match(tsqlParser.INSERTED);
                break;

            case 3:
                this.state = 735;
                this.table_name();
                break;

            }
            this.state = 738;
            this.match(tsqlParser.DOT);
            this.state = 741;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.STAR:
                this.state = 739;
                this.match(tsqlParser.STAR);
                break;
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 740;
                this.r_id();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.DOLLAR_ACTION:
            this.enterOuterAlt(localctx, 2);
            this.state = 743;
            this.match(tsqlParser.DOLLAR_ACTION);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_databaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_database;
    this.database = null; // R_idContext
    this.collation_name = null; // R_idContext
    return this;
}

Create_databaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_databaseContext.prototype.constructor = Create_databaseContext;

Create_databaseContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_databaseContext.prototype.DATABASE = function() {
    return this.getToken(tsqlParser.DATABASE, 0);
};

Create_databaseContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Create_databaseContext.prototype.CONTAINMENT = function() {
    return this.getToken(tsqlParser.CONTAINMENT, 0);
};

Create_databaseContext.prototype.ON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ON);
    } else {
        return this.getToken(tsqlParser.ON, i);
    }
};


Create_databaseContext.prototype.database_file_spec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Database_file_specContext);
    } else {
        return this.getTypedRuleContext(Database_file_specContext,i);
    }
};

Create_databaseContext.prototype.LOG = function() {
    return this.getToken(tsqlParser.LOG, 0);
};

Create_databaseContext.prototype.COLLATE = function() {
    return this.getToken(tsqlParser.COLLATE, 0);
};

Create_databaseContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Create_databaseContext.prototype.create_database_option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Create_database_optionContext);
    } else {
        return this.getTypedRuleContext(Create_database_optionContext,i);
    }
};

Create_databaseContext.prototype.NONE = function() {
    return this.getToken(tsqlParser.NONE, 0);
};

Create_databaseContext.prototype.PARTIAL = function() {
    return this.getToken(tsqlParser.PARTIAL, 0);
};

Create_databaseContext.prototype.PRIMARY = function() {
    return this.getToken(tsqlParser.PRIMARY, 0);
};

Create_databaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_database(this);
	}
};

Create_databaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_database(this);
	}
};




tsqlParser.Create_databaseContext = Create_databaseContext;

tsqlParser.prototype.create_database = function() {

    var localctx = new Create_databaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 34, tsqlParser.RULE_create_database);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 746;
        this.match(tsqlParser.CREATE);
        this.state = 747;
        this.match(tsqlParser.DATABASE);

        this.state = 748;
        localctx.database = this.r_id();
        this.state = 752;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.CONTAINMENT) {
            this.state = 749;
            this.match(tsqlParser.CONTAINMENT);
            this.state = 750;
            this.match(tsqlParser.EQUAL);
            this.state = 751;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.NONE || _la===tsqlParser.PARTIAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 766;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ON) {
            this.state = 754;
            this.match(tsqlParser.ON);
            this.state = 756;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PRIMARY) {
                this.state = 755;
                this.match(tsqlParser.PRIMARY);
            }

            this.state = 758;
            this.database_file_spec();
            this.state = 763;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 759;
                this.match(tsqlParser.COMMA);
                this.state = 760;
                this.database_file_spec();
                this.state = 765;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 778;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.LOG) {
            this.state = 768;
            this.match(tsqlParser.LOG);
            this.state = 769;
            this.match(tsqlParser.ON);
            this.state = 770;
            this.database_file_spec();
            this.state = 775;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 771;
                this.match(tsqlParser.COMMA);
                this.state = 772;
                this.database_file_spec();
                this.state = 777;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 782;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.COLLATE) {
            this.state = 780;
            this.match(tsqlParser.COLLATE);
            this.state = 781;
            localctx.collation_name = this.r_id();
        }

        this.state = 793;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,100,this._ctx);
        if(la_===1) {
            this.state = 784;
            this.match(tsqlParser.WITH);
            this.state = 785;
            this.create_database_option();
            this.state = 790;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 786;
                this.match(tsqlParser.COMMA);
                this.state = 787;
                this.create_database_option();
                this.state = 792;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_indexContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_index;
    return this;
}

Create_indexContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_indexContext.prototype.constructor = Create_indexContext;

Create_indexContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_indexContext.prototype.INDEX = function() {
    return this.getToken(tsqlParser.INDEX, 0);
};

Create_indexContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Create_indexContext.prototype.ON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ON);
    } else {
        return this.getToken(tsqlParser.ON, i);
    }
};


Create_indexContext.prototype.table_name_with_hint = function() {
    return this.getTypedRuleContext(Table_name_with_hintContext,0);
};

Create_indexContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Create_indexContext.prototype.UNIQUE = function() {
    return this.getToken(tsqlParser.UNIQUE, 0);
};

Create_indexContext.prototype.clustered = function() {
    return this.getTypedRuleContext(ClusteredContext,0);
};

Create_indexContext.prototype.index_options = function() {
    return this.getTypedRuleContext(Index_optionsContext,0);
};

Create_indexContext.prototype.ASC = function() {
    return this.getToken(tsqlParser.ASC, 0);
};

Create_indexContext.prototype.DESC = function() {
    return this.getToken(tsqlParser.DESC, 0);
};

Create_indexContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_index(this);
	}
};

Create_indexContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_index(this);
	}
};




tsqlParser.Create_indexContext = Create_indexContext;

tsqlParser.prototype.create_index = function() {

    var localctx = new Create_indexContext(this, this._ctx, this.state);
    this.enterRule(localctx, 36, tsqlParser.RULE_create_index);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 795;
        this.match(tsqlParser.CREATE);
        this.state = 797;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.UNIQUE) {
            this.state = 796;
            this.match(tsqlParser.UNIQUE);
        }

        this.state = 800;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.CLUSTERED || _la===tsqlParser.NONCLUSTERED) {
            this.state = 799;
            this.clustered();
        }

        this.state = 802;
        this.match(tsqlParser.INDEX);
        this.state = 803;
        this.r_id();
        this.state = 804;
        this.match(tsqlParser.ON);
        this.state = 805;
        this.table_name_with_hint();
        this.state = 806;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 807;
        this.column_name_list();
        this.state = 809;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ASC || _la===tsqlParser.DESC) {
            this.state = 808;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ASC || _la===tsqlParser.DESC)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 811;
        this.match(tsqlParser.RR_BRACKET);
        this.state = 813;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,104,this._ctx);
        if(la_===1) {
            this.state = 812;
            this.index_options();

        }
        this.state = 817;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ON) {
            this.state = 815;
            this.match(tsqlParser.ON);
            this.state = 816;
            this.r_id();
        }

        this.state = 820;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,106,this._ctx);
        if(la_===1) {
            this.state = 819;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_procedureContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_procedure;
    this.proc = null; // Token
    return this;
}

Create_procedureContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_procedureContext.prototype.constructor = Create_procedureContext;

Create_procedureContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_procedureContext.prototype.func_proc_name = function() {
    return this.getTypedRuleContext(Func_proc_nameContext,0);
};

Create_procedureContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Create_procedureContext.prototype.sql_clauses = function() {
    return this.getTypedRuleContext(Sql_clausesContext,0);
};

Create_procedureContext.prototype.PROC = function() {
    return this.getToken(tsqlParser.PROC, 0);
};

Create_procedureContext.prototype.PROCEDURE = function() {
    return this.getToken(tsqlParser.PROCEDURE, 0);
};

Create_procedureContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Create_procedureContext.prototype.procedure_param = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Procedure_paramContext);
    } else {
        return this.getTypedRuleContext(Procedure_paramContext,i);
    }
};

Create_procedureContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Create_procedureContext.prototype.procedure_option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Procedure_optionContext);
    } else {
        return this.getTypedRuleContext(Procedure_optionContext,i);
    }
};

Create_procedureContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Create_procedureContext.prototype.REPLICATION = function() {
    return this.getToken(tsqlParser.REPLICATION, 0);
};

Create_procedureContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_procedure(this);
	}
};

Create_procedureContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_procedure(this);
	}
};




tsqlParser.Create_procedureContext = Create_procedureContext;

tsqlParser.prototype.create_procedure = function() {

    var localctx = new Create_procedureContext(this, this._ctx, this.state);
    this.enterRule(localctx, 38, tsqlParser.RULE_create_procedure);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 822;
        this.match(tsqlParser.CREATE);
        this.state = 823;
        localctx.proc = this._input.LT(1);
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.PROC || _la===tsqlParser.PROCEDURE)) {
            localctx.proc = this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 824;
        this.func_proc_name();
        this.state = 827;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.SEMI) {
            this.state = 825;
            this.match(tsqlParser.SEMI);
            this.state = 826;
            this.match(tsqlParser.DECIMAL);
        }

        this.state = 843;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.LR_BRACKET) {
            this.state = 830;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.LR_BRACKET) {
                this.state = 829;
                this.match(tsqlParser.LR_BRACKET);
            }

            this.state = 832;
            this.procedure_param();
            this.state = 837;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 833;
                this.match(tsqlParser.COMMA);
                this.state = 834;
                this.procedure_param();
                this.state = 839;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 841;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.RR_BRACKET) {
                this.state = 840;
                this.match(tsqlParser.RR_BRACKET);
            }

        }

        this.state = 854;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 845;
            this.match(tsqlParser.WITH);
            this.state = 846;
            this.procedure_option();
            this.state = 851;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 847;
                this.match(tsqlParser.COMMA);
                this.state = 848;
                this.procedure_option();
                this.state = 853;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 858;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FOR) {
            this.state = 856;
            this.match(tsqlParser.FOR);
            this.state = 857;
            this.match(tsqlParser.REPLICATION);
        }

        this.state = 860;
        this.match(tsqlParser.AS);
        this.state = 861;
        this.sql_clauses();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Procedure_paramContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_procedure_param;
    this.default_val = null; // Default_valueContext
    return this;
}

Procedure_paramContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Procedure_paramContext.prototype.constructor = Procedure_paramContext;

Procedure_paramContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Procedure_paramContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};

Procedure_paramContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Procedure_paramContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Procedure_paramContext.prototype.VARYING = function() {
    return this.getToken(tsqlParser.VARYING, 0);
};

Procedure_paramContext.prototype.default_value = function() {
    return this.getTypedRuleContext(Default_valueContext,0);
};

Procedure_paramContext.prototype.OUT = function() {
    return this.getToken(tsqlParser.OUT, 0);
};

Procedure_paramContext.prototype.OUTPUT = function() {
    return this.getToken(tsqlParser.OUTPUT, 0);
};

Procedure_paramContext.prototype.READONLY = function() {
    return this.getToken(tsqlParser.READONLY, 0);
};

Procedure_paramContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterProcedure_param(this);
	}
};

Procedure_paramContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitProcedure_param(this);
	}
};




tsqlParser.Procedure_paramContext = Procedure_paramContext;

tsqlParser.prototype.procedure_param = function() {

    var localctx = new Procedure_paramContext(this, this._ctx, this.state);
    this.enterRule(localctx, 40, tsqlParser.RULE_procedure_param);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 863;
        this.match(tsqlParser.LOCAL_ID);
        this.state = 867;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,115,this._ctx);
        if(la_===1) {
            this.state = 864;
            this.r_id();
            this.state = 865;
            this.match(tsqlParser.DOT);

        }
        this.state = 870;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.AS) {
            this.state = 869;
            this.match(tsqlParser.AS);
        }

        this.state = 872;
        this.data_type();
        this.state = 874;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.VARYING) {
            this.state = 873;
            this.match(tsqlParser.VARYING);
        }

        this.state = 878;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.EQUAL) {
            this.state = 876;
            this.match(tsqlParser.EQUAL);
            this.state = 877;
            localctx.default_val = this.default_value();
        }

        this.state = 881;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(((((_la - 322)) & ~0x1f) == 0 && ((1 << (_la - 322)) & ((1 << (tsqlParser.OUT - 322)) | (1 << (tsqlParser.OUTPUT - 322)) | (1 << (tsqlParser.READONLY - 322)))) !== 0)) {
            this.state = 880;
            _la = this._input.LA(1);
            if(!(((((_la - 322)) & ~0x1f) == 0 && ((1 << (_la - 322)) & ((1 << (tsqlParser.OUT - 322)) | (1 << (tsqlParser.OUTPUT - 322)) | (1 << (tsqlParser.READONLY - 322)))) !== 0))) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Procedure_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_procedure_option;
    return this;
}

Procedure_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Procedure_optionContext.prototype.constructor = Procedure_optionContext;

Procedure_optionContext.prototype.ENCRYPTION = function() {
    return this.getToken(tsqlParser.ENCRYPTION, 0);
};

Procedure_optionContext.prototype.RECOMPILE = function() {
    return this.getToken(tsqlParser.RECOMPILE, 0);
};

Procedure_optionContext.prototype.execute_clause = function() {
    return this.getTypedRuleContext(Execute_clauseContext,0);
};

Procedure_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterProcedure_option(this);
	}
};

Procedure_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitProcedure_option(this);
	}
};




tsqlParser.Procedure_optionContext = Procedure_optionContext;

tsqlParser.prototype.procedure_option = function() {

    var localctx = new Procedure_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 42, tsqlParser.RULE_procedure_option);
    try {
        this.state = 886;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.ENCRYPTION:
            this.enterOuterAlt(localctx, 1);
            this.state = 883;
            this.match(tsqlParser.ENCRYPTION);
            break;
        case tsqlParser.RECOMPILE:
            this.enterOuterAlt(localctx, 2);
            this.state = 884;
            this.match(tsqlParser.RECOMPILE);
            break;
        case tsqlParser.EXECUTE:
            this.enterOuterAlt(localctx, 3);
            this.state = 885;
            this.execute_clause();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_statisticsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_statistics;
    return this;
}

Create_statisticsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_statisticsContext.prototype.constructor = Create_statisticsContext;

Create_statisticsContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_statisticsContext.prototype.STATISTICS = function() {
    return this.getToken(tsqlParser.STATISTICS, 0);
};

Create_statisticsContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Create_statisticsContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Create_statisticsContext.prototype.table_name_with_hint = function() {
    return this.getTypedRuleContext(Table_name_with_hintContext,0);
};

Create_statisticsContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Create_statisticsContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Create_statisticsContext.prototype.FULLSCAN = function() {
    return this.getToken(tsqlParser.FULLSCAN, 0);
};

Create_statisticsContext.prototype.SAMPLE = function() {
    return this.getToken(tsqlParser.SAMPLE, 0);
};

Create_statisticsContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Create_statisticsContext.prototype.STATS_STREAM = function() {
    return this.getToken(tsqlParser.STATS_STREAM, 0);
};

Create_statisticsContext.prototype.PERCENT = function() {
    return this.getToken(tsqlParser.PERCENT, 0);
};

Create_statisticsContext.prototype.ROWS = function() {
    return this.getToken(tsqlParser.ROWS, 0);
};

Create_statisticsContext.prototype.NORECOMPUTE = function() {
    return this.getToken(tsqlParser.NORECOMPUTE, 0);
};

Create_statisticsContext.prototype.INCREMENTAL = function() {
    return this.getToken(tsqlParser.INCREMENTAL, 0);
};

Create_statisticsContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Create_statisticsContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Create_statisticsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_statistics(this);
	}
};

Create_statisticsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_statistics(this);
	}
};




tsqlParser.Create_statisticsContext = Create_statisticsContext;

tsqlParser.prototype.create_statistics = function() {

    var localctx = new Create_statisticsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 44, tsqlParser.RULE_create_statistics);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 888;
        this.match(tsqlParser.CREATE);
        this.state = 889;
        this.match(tsqlParser.STATISTICS);
        this.state = 890;
        this.r_id();
        this.state = 891;
        this.match(tsqlParser.ON);
        this.state = 892;
        this.table_name_with_hint();
        this.state = 893;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 894;
        this.column_name_list();
        this.state = 895;
        this.match(tsqlParser.RR_BRACKET);
        this.state = 914;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,124,this._ctx);
        if(la_===1) {
            this.state = 896;
            this.match(tsqlParser.WITH);
            this.state = 902;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FULLSCAN:
                this.state = 897;
                this.match(tsqlParser.FULLSCAN);
                break;
            case tsqlParser.SAMPLE:
                this.state = 898;
                this.match(tsqlParser.SAMPLE);
                this.state = 899;
                this.match(tsqlParser.DECIMAL);
                this.state = 900;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.PERCENT || _la===tsqlParser.ROWS)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                break;
            case tsqlParser.STATS_STREAM:
                this.state = 901;
                this.match(tsqlParser.STATS_STREAM);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 906;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,122,this._ctx);
            if(la_===1) {
                this.state = 904;
                this.match(tsqlParser.COMMA);
                this.state = 905;
                this.match(tsqlParser.NORECOMPUTE);

            }
            this.state = 912;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 908;
                this.match(tsqlParser.COMMA);
                this.state = 909;
                this.match(tsqlParser.INCREMENTAL);
                this.state = 910;
                this.match(tsqlParser.EQUAL);
                this.state = 911;
                this.on_off();
            }


        }
        this.state = 917;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,125,this._ctx);
        if(la_===1) {
            this.state = 916;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_tableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_table;
    return this;
}

Create_tableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_tableContext.prototype.constructor = Create_tableContext;

Create_tableContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_tableContext.prototype.TABLE = function() {
    return this.getToken(tsqlParser.TABLE, 0);
};

Create_tableContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Create_tableContext.prototype.column_def_table_constraints = function() {
    return this.getTypedRuleContext(Column_def_table_constraintsContext,0);
};

Create_tableContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Create_tableContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Create_tableContext.prototype.DEFAULT = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.DEFAULT);
    } else {
        return this.getToken(tsqlParser.DEFAULT, i);
    }
};


Create_tableContext.prototype.TEXTIMAGE_ON = function() {
    return this.getToken(tsqlParser.TEXTIMAGE_ON, 0);
};

Create_tableContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_table(this);
	}
};

Create_tableContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_table(this);
	}
};




tsqlParser.Create_tableContext = Create_tableContext;

tsqlParser.prototype.create_table = function() {

    var localctx = new Create_tableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 46, tsqlParser.RULE_create_table);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 919;
        this.match(tsqlParser.CREATE);
        this.state = 920;
        this.match(tsqlParser.TABLE);
        this.state = 921;
        this.table_name();
        this.state = 922;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 923;
        this.column_def_table_constraints();
        this.state = 925;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.COMMA) {
            this.state = 924;
            this.match(tsqlParser.COMMA);
        }

        this.state = 927;
        this.match(tsqlParser.RR_BRACKET);
        this.state = 931;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,127,this._ctx);
        if(la_===1) {
            this.state = 928;
            this.match(tsqlParser.ON);
            this.state = 929;
            this.r_id();

        } else if(la_===2) {
            this.state = 930;
            this.match(tsqlParser.DEFAULT);

        }
        this.state = 936;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,128,this._ctx);
        if(la_===1) {
            this.state = 933;
            this.match(tsqlParser.TEXTIMAGE_ON);
            this.state = 934;
            this.r_id();

        } else if(la_===2) {
            this.state = 935;
            this.match(tsqlParser.DEFAULT);

        }
        this.state = 939;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,129,this._ctx);
        if(la_===1) {
            this.state = 938;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_viewContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_view;
    return this;
}

Create_viewContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_viewContext.prototype.constructor = Create_viewContext;

Create_viewContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_viewContext.prototype.VIEW = function() {
    return this.getToken(tsqlParser.VIEW, 0);
};

Create_viewContext.prototype.simple_name = function() {
    return this.getTypedRuleContext(Simple_nameContext,0);
};

Create_viewContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Create_viewContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

Create_viewContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Create_viewContext.prototype.WITH = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.WITH);
    } else {
        return this.getToken(tsqlParser.WITH, i);
    }
};


Create_viewContext.prototype.view_attribute = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(View_attributeContext);
    } else {
        return this.getTypedRuleContext(View_attributeContext,i);
    }
};

Create_viewContext.prototype.CHECK = function() {
    return this.getToken(tsqlParser.CHECK, 0);
};

Create_viewContext.prototype.OPTION = function() {
    return this.getToken(tsqlParser.OPTION, 0);
};

Create_viewContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_view(this);
	}
};

Create_viewContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_view(this);
	}
};




tsqlParser.Create_viewContext = Create_viewContext;

tsqlParser.prototype.create_view = function() {

    var localctx = new Create_viewContext(this, this._ctx, this.state);
    this.enterRule(localctx, 48, tsqlParser.RULE_create_view);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 941;
        this.match(tsqlParser.CREATE);
        this.state = 942;
        this.match(tsqlParser.VIEW);
        this.state = 943;
        this.simple_name();
        this.state = 948;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.LR_BRACKET) {
            this.state = 944;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 945;
            this.column_name_list();
            this.state = 946;
            this.match(tsqlParser.RR_BRACKET);
        }

        this.state = 959;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 950;
            this.match(tsqlParser.WITH);
            this.state = 951;
            this.view_attribute();
            this.state = 956;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 952;
                this.match(tsqlParser.COMMA);
                this.state = 953;
                this.view_attribute();
                this.state = 958;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 961;
        this.match(tsqlParser.AS);
        this.state = 962;
        this.select_statement();
        this.state = 966;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,133,this._ctx);
        if(la_===1) {
            this.state = 963;
            this.match(tsqlParser.WITH);
            this.state = 964;
            this.match(tsqlParser.CHECK);
            this.state = 965;
            this.match(tsqlParser.OPTION);

        }
        this.state = 969;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,134,this._ctx);
        if(la_===1) {
            this.state = 968;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function View_attributeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_view_attribute;
    return this;
}

View_attributeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
View_attributeContext.prototype.constructor = View_attributeContext;

View_attributeContext.prototype.ENCRYPTION = function() {
    return this.getToken(tsqlParser.ENCRYPTION, 0);
};

View_attributeContext.prototype.SCHEMABINDING = function() {
    return this.getToken(tsqlParser.SCHEMABINDING, 0);
};

View_attributeContext.prototype.VIEW_METADATA = function() {
    return this.getToken(tsqlParser.VIEW_METADATA, 0);
};

View_attributeContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterView_attribute(this);
	}
};

View_attributeContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitView_attribute(this);
	}
};




tsqlParser.View_attributeContext = View_attributeContext;

tsqlParser.prototype.view_attribute = function() {

    var localctx = new View_attributeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 50, tsqlParser.RULE_view_attribute);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 971;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.ENCRYPTION || _la===tsqlParser.SCHEMABINDING || _la===tsqlParser.VIEW_METADATA)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Alter_tableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_alter_table;
    this.constraint = null; // R_idContext
    this.fk = null; // Column_name_listContext
    this.pk = null; // Column_name_listContext
    return this;
}

Alter_tableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Alter_tableContext.prototype.constructor = Alter_tableContext;

Alter_tableContext.prototype.ALTER = function() {
    return this.getToken(tsqlParser.ALTER, 0);
};

Alter_tableContext.prototype.TABLE = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.TABLE);
    } else {
        return this.getToken(tsqlParser.TABLE, i);
    }
};


Alter_tableContext.prototype.table_name = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Table_nameContext);
    } else {
        return this.getTypedRuleContext(Table_nameContext,i);
    }
};

Alter_tableContext.prototype.SET = function() {
    return this.getToken(tsqlParser.SET, 0);
};

Alter_tableContext.prototype.LOCK_ESCALATION = function() {
    return this.getToken(tsqlParser.LOCK_ESCALATION, 0);
};

Alter_tableContext.prototype.ADD = function() {
    return this.getToken(tsqlParser.ADD, 0);
};

Alter_tableContext.prototype.column_def_table_constraint = function() {
    return this.getTypedRuleContext(Column_def_table_constraintContext,0);
};

Alter_tableContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Alter_tableContext.prototype.CONSTRAINT = function() {
    return this.getToken(tsqlParser.CONSTRAINT, 0);
};

Alter_tableContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Alter_tableContext.prototype.CHECK = function() {
    return this.getToken(tsqlParser.CHECK, 0);
};

Alter_tableContext.prototype.FOREIGN = function() {
    return this.getToken(tsqlParser.FOREIGN, 0);
};

Alter_tableContext.prototype.KEY = function() {
    return this.getToken(tsqlParser.KEY, 0);
};

Alter_tableContext.prototype.REFERENCES = function() {
    return this.getToken(tsqlParser.REFERENCES, 0);
};

Alter_tableContext.prototype.AUTO = function() {
    return this.getToken(tsqlParser.AUTO, 0);
};

Alter_tableContext.prototype.DISABLE = function() {
    return this.getToken(tsqlParser.DISABLE, 0);
};

Alter_tableContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Alter_tableContext.prototype.column_name_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Column_name_listContext);
    } else {
        return this.getTypedRuleContext(Column_name_listContext,i);
    }
};

Alter_tableContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAlter_table(this);
	}
};

Alter_tableContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAlter_table(this);
	}
};




tsqlParser.Alter_tableContext = Alter_tableContext;

tsqlParser.prototype.alter_table = function() {

    var localctx = new Alter_tableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 52, tsqlParser.RULE_alter_table);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 973;
        this.match(tsqlParser.ALTER);
        this.state = 974;
        this.match(tsqlParser.TABLE);
        this.state = 975;
        this.table_name();
        this.state = 1006;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.SET:
            this.state = 976;
            this.match(tsqlParser.SET);
            this.state = 977;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 978;
            this.match(tsqlParser.LOCK_ESCALATION);
            this.state = 979;
            this.match(tsqlParser.EQUAL);
            this.state = 980;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TABLE || _la===tsqlParser.AUTO || _la===tsqlParser.DISABLE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 981;
            this.match(tsqlParser.RR_BRACKET);
            break;
        case tsqlParser.ADD:
            this.state = 982;
            this.match(tsqlParser.ADD);
            this.state = 983;
            this.column_def_table_constraint();
            break;
        case tsqlParser.DROP:
            this.state = 984;
            this.match(tsqlParser.DROP);
            this.state = 985;
            this.match(tsqlParser.CONSTRAINT);
            this.state = 986;
            localctx.constraint = this.r_id();
            break;
        case tsqlParser.WITH:
            this.state = 987;
            this.match(tsqlParser.WITH);
            this.state = 988;
            this.match(tsqlParser.CHECK);
            this.state = 989;
            this.match(tsqlParser.ADD);
            this.state = 990;
            this.match(tsqlParser.CONSTRAINT);
            this.state = 991;
            localctx.constraint = this.r_id();
            this.state = 992;
            this.match(tsqlParser.FOREIGN);
            this.state = 993;
            this.match(tsqlParser.KEY);
            this.state = 994;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 995;
            localctx.fk = this.column_name_list();
            this.state = 996;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 997;
            this.match(tsqlParser.REFERENCES);
            this.state = 998;
            this.table_name();
            this.state = 999;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1000;
            localctx.pk = this.column_name_list();
            this.state = 1001;
            this.match(tsqlParser.RR_BRACKET);
            break;
        case tsqlParser.CHECK:
            this.state = 1003;
            this.match(tsqlParser.CHECK);
            this.state = 1004;
            this.match(tsqlParser.CONSTRAINT);
            this.state = 1005;
            localctx.constraint = this.r_id();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 1009;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,136,this._ctx);
        if(la_===1) {
            this.state = 1008;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Alter_databaseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_alter_database;
    this.database = null; // R_idContext
    this.new_name = null; // R_idContext
    this.collation = null; // R_idContext
    return this;
}

Alter_databaseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Alter_databaseContext.prototype.constructor = Alter_databaseContext;

Alter_databaseContext.prototype.ALTER = function() {
    return this.getToken(tsqlParser.ALTER, 0);
};

Alter_databaseContext.prototype.DATABASE = function() {
    return this.getToken(tsqlParser.DATABASE, 0);
};

Alter_databaseContext.prototype.CURRENT = function() {
    return this.getToken(tsqlParser.CURRENT, 0);
};

Alter_databaseContext.prototype.MODIFY = function() {
    return this.getToken(tsqlParser.MODIFY, 0);
};

Alter_databaseContext.prototype.NAME = function() {
    return this.getToken(tsqlParser.NAME, 0);
};

Alter_databaseContext.prototype.COLLATE = function() {
    return this.getToken(tsqlParser.COLLATE, 0);
};

Alter_databaseContext.prototype.SET = function() {
    return this.getToken(tsqlParser.SET, 0);
};

Alter_databaseContext.prototype.database_optionspec = function() {
    return this.getTypedRuleContext(Database_optionspecContext,0);
};

Alter_databaseContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Alter_databaseContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Alter_databaseContext.prototype.termination = function() {
    return this.getTypedRuleContext(TerminationContext,0);
};

Alter_databaseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAlter_database(this);
	}
};

Alter_databaseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAlter_database(this);
	}
};




tsqlParser.Alter_databaseContext = Alter_databaseContext;

tsqlParser.prototype.alter_database = function() {

    var localctx = new Alter_databaseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 54, tsqlParser.RULE_alter_database);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1011;
        this.match(tsqlParser.ALTER);
        this.state = 1012;
        this.match(tsqlParser.DATABASE);
        this.state = 1015;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.state = 1013;
            localctx.database = this.r_id();
            break;
        case tsqlParser.CURRENT:
            this.state = 1014;
            this.match(tsqlParser.CURRENT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 1029;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.MODIFY:
            this.state = 1017;
            this.match(tsqlParser.MODIFY);
            this.state = 1018;
            this.match(tsqlParser.NAME);
            this.state = 1019;
            this.match(tsqlParser.EQUAL);
            this.state = 1020;
            localctx.new_name = this.r_id();
            break;
        case tsqlParser.COLLATE:
            this.state = 1021;
            this.match(tsqlParser.COLLATE);
            this.state = 1022;
            localctx.collation = this.r_id();
            break;
        case tsqlParser.SET:
            this.state = 1023;
            this.match(tsqlParser.SET);
            this.state = 1024;
            this.database_optionspec();
            this.state = 1027;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,138,this._ctx);
            if(la_===1) {
                this.state = 1025;
                this.match(tsqlParser.WITH);
                this.state = 1026;
                this.termination();

            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 1032;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,140,this._ctx);
        if(la_===1) {
            this.state = 1031;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Database_optionspecContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_database_optionspec;
    return this;
}

Database_optionspecContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Database_optionspecContext.prototype.constructor = Database_optionspecContext;

Database_optionspecContext.prototype.auto_option = function() {
    return this.getTypedRuleContext(Auto_optionContext,0);
};

Database_optionspecContext.prototype.change_tracking_option = function() {
    return this.getTypedRuleContext(Change_tracking_optionContext,0);
};

Database_optionspecContext.prototype.containment_option = function() {
    return this.getTypedRuleContext(Containment_optionContext,0);
};

Database_optionspecContext.prototype.cursor_option = function() {
    return this.getTypedRuleContext(Cursor_optionContext,0);
};

Database_optionspecContext.prototype.date_correlation_optimization_option = function() {
    return this.getTypedRuleContext(Date_correlation_optimization_optionContext,0);
};

Database_optionspecContext.prototype.db_encryption_option = function() {
    return this.getTypedRuleContext(Db_encryption_optionContext,0);
};

Database_optionspecContext.prototype.db_state_option = function() {
    return this.getTypedRuleContext(Db_state_optionContext,0);
};

Database_optionspecContext.prototype.db_update_option = function() {
    return this.getTypedRuleContext(Db_update_optionContext,0);
};

Database_optionspecContext.prototype.db_user_access_option = function() {
    return this.getTypedRuleContext(Db_user_access_optionContext,0);
};

Database_optionspecContext.prototype.delayed_durability_option = function() {
    return this.getTypedRuleContext(Delayed_durability_optionContext,0);
};

Database_optionspecContext.prototype.external_access_option = function() {
    return this.getTypedRuleContext(External_access_optionContext,0);
};

Database_optionspecContext.prototype.FILESTREAM = function() {
    return this.getToken(tsqlParser.FILESTREAM, 0);
};

Database_optionspecContext.prototype.database_filestream_option = function() {
    return this.getTypedRuleContext(Database_filestream_optionContext,0);
};

Database_optionspecContext.prototype.HADR_options = function() {
    return this.getToken(tsqlParser.HADR_options, 0);
};

Database_optionspecContext.prototype.mixed_page_allocation_option = function() {
    return this.getTypedRuleContext(Mixed_page_allocation_optionContext,0);
};

Database_optionspecContext.prototype.parameterization_option = function() {
    return this.getTypedRuleContext(Parameterization_optionContext,0);
};

Database_optionspecContext.prototype.recovery_option = function() {
    return this.getTypedRuleContext(Recovery_optionContext,0);
};

Database_optionspecContext.prototype.service_broker_option = function() {
    return this.getTypedRuleContext(Service_broker_optionContext,0);
};

Database_optionspecContext.prototype.snapshot_option = function() {
    return this.getTypedRuleContext(Snapshot_optionContext,0);
};

Database_optionspecContext.prototype.sql_option = function() {
    return this.getTypedRuleContext(Sql_optionContext,0);
};

Database_optionspecContext.prototype.target_recovery_time_option = function() {
    return this.getTypedRuleContext(Target_recovery_time_optionContext,0);
};

Database_optionspecContext.prototype.termination = function() {
    return this.getTypedRuleContext(TerminationContext,0);
};

Database_optionspecContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDatabase_optionspec(this);
	}
};

Database_optionspecContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDatabase_optionspec(this);
	}
};




tsqlParser.Database_optionspecContext = Database_optionspecContext;

tsqlParser.prototype.database_optionspec = function() {

    var localctx = new Database_optionspecContext(this, this._ctx, this.state);
    this.enterRule(localctx, 56, tsqlParser.RULE_database_optionspec);
    try {
        this.state = 1056;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,141,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1034;
            this.auto_option();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1035;
            this.change_tracking_option();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1036;
            this.containment_option();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1037;
            this.cursor_option();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1038;
            this.date_correlation_optimization_option();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1039;
            this.db_encryption_option();
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1040;
            this.db_state_option();
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 1041;
            this.db_update_option();
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 1042;
            this.db_user_access_option();
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 1043;
            this.delayed_durability_option();
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 1044;
            this.external_access_option();
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 1045;
            this.match(tsqlParser.FILESTREAM);
            this.state = 1046;
            this.database_filestream_option();
            break;

        case 13:
            this.enterOuterAlt(localctx, 13);
            this.state = 1047;
            this.match(tsqlParser.HADR_options);
            break;

        case 14:
            this.enterOuterAlt(localctx, 14);
            this.state = 1048;
            this.mixed_page_allocation_option();
            break;

        case 15:
            this.enterOuterAlt(localctx, 15);
            this.state = 1049;
            this.parameterization_option();
            break;

        case 16:
            this.enterOuterAlt(localctx, 16);
            this.state = 1050;
            this.recovery_option();
            break;

        case 17:
            this.enterOuterAlt(localctx, 17);
            this.state = 1051;
            this.service_broker_option();
            break;

        case 18:
            this.enterOuterAlt(localctx, 18);
            this.state = 1052;
            this.snapshot_option();
            break;

        case 19:
            this.enterOuterAlt(localctx, 19);
            this.state = 1053;
            this.sql_option();
            break;

        case 20:
            this.enterOuterAlt(localctx, 20);
            this.state = 1054;
            this.target_recovery_time_option();
            break;

        case 21:
            this.enterOuterAlt(localctx, 21);
            this.state = 1055;
            this.termination();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Auto_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_auto_option;
    return this;
}

Auto_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Auto_optionContext.prototype.constructor = Auto_optionContext;

Auto_optionContext.prototype.AUTO_CLOSE = function() {
    return this.getToken(tsqlParser.AUTO_CLOSE, 0);
};

Auto_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Auto_optionContext.prototype.AUTO_CREATE_STATISTICS = function() {
    return this.getToken(tsqlParser.AUTO_CREATE_STATISTICS, 0);
};

Auto_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Auto_optionContext.prototype.ON = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ON);
    } else {
        return this.getToken(tsqlParser.ON, i);
    }
};


Auto_optionContext.prototype.INCREMENTAL = function() {
    return this.getToken(tsqlParser.INCREMENTAL, 0);
};

Auto_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Auto_optionContext.prototype.AUTO_SHRINK = function() {
    return this.getToken(tsqlParser.AUTO_SHRINK, 0);
};

Auto_optionContext.prototype.AUTO_UPDATE_STATISTICS = function() {
    return this.getToken(tsqlParser.AUTO_UPDATE_STATISTICS, 0);
};

Auto_optionContext.prototype.AUTO_UPDATE_STATISTICS_ASYNC = function() {
    return this.getToken(tsqlParser.AUTO_UPDATE_STATISTICS_ASYNC, 0);
};

Auto_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAuto_option(this);
	}
};

Auto_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAuto_option(this);
	}
};




tsqlParser.Auto_optionContext = Auto_optionContext;

tsqlParser.prototype.auto_option = function() {

    var localctx = new Auto_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 58, tsqlParser.RULE_auto_option);
    var _la = 0; // Token type
    try {
        this.state = 1075;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.AUTO_CLOSE:
            this.enterOuterAlt(localctx, 1);
            this.state = 1058;
            this.match(tsqlParser.AUTO_CLOSE);
            this.state = 1059;
            this.on_off();
            break;
        case tsqlParser.AUTO_CREATE_STATISTICS:
            this.enterOuterAlt(localctx, 2);
            this.state = 1060;
            this.match(tsqlParser.AUTO_CREATE_STATISTICS);
            this.state = 1061;
            this.match(tsqlParser.OFF);
            break;
        case tsqlParser.ON:
            this.enterOuterAlt(localctx, 3);
            this.state = 1062;
            this.match(tsqlParser.ON);
            this.state = 1067;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.INCREMENTAL:
                this.state = 1063;
                this.match(tsqlParser.INCREMENTAL);
                this.state = 1064;
                this.match(tsqlParser.EQUAL);
                this.state = 1065;
                this.match(tsqlParser.ON);
                break;
            case tsqlParser.OFF:
                this.state = 1066;
                this.match(tsqlParser.OFF);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.AUTO_SHRINK:
            this.enterOuterAlt(localctx, 4);
            this.state = 1069;
            this.match(tsqlParser.AUTO_SHRINK);
            this.state = 1070;
            this.on_off();
            break;
        case tsqlParser.AUTO_UPDATE_STATISTICS:
            this.enterOuterAlt(localctx, 5);
            this.state = 1071;
            this.match(tsqlParser.AUTO_UPDATE_STATISTICS);
            this.state = 1072;
            this.on_off();
            break;
        case tsqlParser.AUTO_UPDATE_STATISTICS_ASYNC:
            this.enterOuterAlt(localctx, 6);
            this.state = 1073;
            this.match(tsqlParser.AUTO_UPDATE_STATISTICS_ASYNC);
            this.state = 1074;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Change_tracking_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_change_tracking_option;
    return this;
}

Change_tracking_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Change_tracking_optionContext.prototype.constructor = Change_tracking_optionContext;

Change_tracking_optionContext.prototype.CHANGE_TRACKING = function() {
    return this.getToken(tsqlParser.CHANGE_TRACKING, 0);
};

Change_tracking_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Change_tracking_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Change_tracking_optionContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Change_tracking_optionContext.prototype.change_tracking_option_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Change_tracking_option_listContext);
    } else {
        return this.getTypedRuleContext(Change_tracking_option_listContext,i);
    }
};

Change_tracking_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterChange_tracking_option(this);
	}
};

Change_tracking_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitChange_tracking_option(this);
	}
};




tsqlParser.Change_tracking_optionContext = Change_tracking_optionContext;

tsqlParser.prototype.change_tracking_option = function() {

    var localctx = new Change_tracking_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 60, tsqlParser.RULE_change_tracking_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1077;
        this.match(tsqlParser.CHANGE_TRACKING);
        this.state = 1078;
        this.match(tsqlParser.EQUAL);
        this.state = 1094;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.OFF:
            this.state = 1079;
            this.match(tsqlParser.OFF);
            break;
        case tsqlParser.ON:
            this.state = 1080;
            this.match(tsqlParser.ON);
            this.state = 1091;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.AUTO_CLEANUP || _la===tsqlParser.CHANGE_RETENTION) {
                this.state = 1081;
                this.change_tracking_option_list();
                this.state = 1086;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===tsqlParser.COMMA) {
                    this.state = 1082;
                    this.match(tsqlParser.COMMA);
                    this.state = 1083;
                    this.change_tracking_option_list();
                    this.state = 1088;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 1093;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Change_tracking_option_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_change_tracking_option_list;
    return this;
}

Change_tracking_option_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Change_tracking_option_listContext.prototype.constructor = Change_tracking_option_listContext;

Change_tracking_option_listContext.prototype.AUTO_CLEANUP = function() {
    return this.getToken(tsqlParser.AUTO_CLEANUP, 0);
};

Change_tracking_option_listContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Change_tracking_option_listContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Change_tracking_option_listContext.prototype.CHANGE_RETENTION = function() {
    return this.getToken(tsqlParser.CHANGE_RETENTION, 0);
};

Change_tracking_option_listContext.prototype.DAYS = function() {
    return this.getToken(tsqlParser.DAYS, 0);
};

Change_tracking_option_listContext.prototype.HOURS = function() {
    return this.getToken(tsqlParser.HOURS, 0);
};

Change_tracking_option_listContext.prototype.MINUTES = function() {
    return this.getToken(tsqlParser.MINUTES, 0);
};

Change_tracking_option_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterChange_tracking_option_list(this);
	}
};

Change_tracking_option_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitChange_tracking_option_list(this);
	}
};




tsqlParser.Change_tracking_option_listContext = Change_tracking_option_listContext;

tsqlParser.prototype.change_tracking_option_list = function() {

    var localctx = new Change_tracking_option_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 62, tsqlParser.RULE_change_tracking_option_list);
    var _la = 0; // Token type
    try {
        this.state = 1102;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.AUTO_CLEANUP:
            this.enterOuterAlt(localctx, 1);
            this.state = 1096;
            this.match(tsqlParser.AUTO_CLEANUP);
            this.state = 1097;
            this.match(tsqlParser.EQUAL);
            this.state = 1098;
            this.on_off();
            break;
        case tsqlParser.CHANGE_RETENTION:
            this.enterOuterAlt(localctx, 2);
            this.state = 1099;
            this.match(tsqlParser.CHANGE_RETENTION);
            this.state = 1100;
            this.match(tsqlParser.EQUAL);
            this.state = 1101;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.DAYS || _la===tsqlParser.HOURS || _la===tsqlParser.MINUTES)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Containment_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_containment_option;
    return this;
}

Containment_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Containment_optionContext.prototype.constructor = Containment_optionContext;

Containment_optionContext.prototype.CONTAINMENT = function() {
    return this.getToken(tsqlParser.CONTAINMENT, 0);
};

Containment_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Containment_optionContext.prototype.NONE = function() {
    return this.getToken(tsqlParser.NONE, 0);
};

Containment_optionContext.prototype.PARTIAL = function() {
    return this.getToken(tsqlParser.PARTIAL, 0);
};

Containment_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterContainment_option(this);
	}
};

Containment_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitContainment_option(this);
	}
};




tsqlParser.Containment_optionContext = Containment_optionContext;

tsqlParser.prototype.containment_option = function() {

    var localctx = new Containment_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 64, tsqlParser.RULE_containment_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1104;
        this.match(tsqlParser.CONTAINMENT);
        this.state = 1105;
        this.match(tsqlParser.EQUAL);
        this.state = 1106;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.NONE || _la===tsqlParser.PARTIAL)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Cursor_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_cursor_option;
    return this;
}

Cursor_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Cursor_optionContext.prototype.constructor = Cursor_optionContext;

Cursor_optionContext.prototype.CURSOR_CLOSE_ON_COMMIT = function() {
    return this.getToken(tsqlParser.CURSOR_CLOSE_ON_COMMIT, 0);
};

Cursor_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Cursor_optionContext.prototype.CURSOR_DEFAULT = function() {
    return this.getToken(tsqlParser.CURSOR_DEFAULT, 0);
};

Cursor_optionContext.prototype.LOCAL = function() {
    return this.getToken(tsqlParser.LOCAL, 0);
};

Cursor_optionContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Cursor_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCursor_option(this);
	}
};

Cursor_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCursor_option(this);
	}
};




tsqlParser.Cursor_optionContext = Cursor_optionContext;

tsqlParser.prototype.cursor_option = function() {

    var localctx = new Cursor_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 66, tsqlParser.RULE_cursor_option);
    var _la = 0; // Token type
    try {
        this.state = 1112;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.CURSOR_CLOSE_ON_COMMIT:
            this.enterOuterAlt(localctx, 1);
            this.state = 1108;
            this.match(tsqlParser.CURSOR_CLOSE_ON_COMMIT);
            this.state = 1109;
            this.on_off();
            break;
        case tsqlParser.CURSOR_DEFAULT:
            this.enterOuterAlt(localctx, 2);
            this.state = 1110;
            this.match(tsqlParser.CURSOR_DEFAULT);
            this.state = 1111;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.GLOBAL || _la===tsqlParser.LOCAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Date_correlation_optimization_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_date_correlation_optimization_option;
    return this;
}

Date_correlation_optimization_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Date_correlation_optimization_optionContext.prototype.constructor = Date_correlation_optimization_optionContext;

Date_correlation_optimization_optionContext.prototype.DATE_CORRELATION_OPTIMIZATION = function() {
    return this.getToken(tsqlParser.DATE_CORRELATION_OPTIMIZATION, 0);
};

Date_correlation_optimization_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Date_correlation_optimization_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDate_correlation_optimization_option(this);
	}
};

Date_correlation_optimization_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDate_correlation_optimization_option(this);
	}
};




tsqlParser.Date_correlation_optimization_optionContext = Date_correlation_optimization_optionContext;

tsqlParser.prototype.date_correlation_optimization_option = function() {

    var localctx = new Date_correlation_optimization_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 68, tsqlParser.RULE_date_correlation_optimization_option);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1114;
        this.match(tsqlParser.DATE_CORRELATION_OPTIMIZATION);
        this.state = 1115;
        this.on_off();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Db_encryption_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_db_encryption_option;
    return this;
}

Db_encryption_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Db_encryption_optionContext.prototype.constructor = Db_encryption_optionContext;

Db_encryption_optionContext.prototype.ENCRYPTION = function() {
    return this.getToken(tsqlParser.ENCRYPTION, 0);
};

Db_encryption_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Db_encryption_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDb_encryption_option(this);
	}
};

Db_encryption_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDb_encryption_option(this);
	}
};




tsqlParser.Db_encryption_optionContext = Db_encryption_optionContext;

tsqlParser.prototype.db_encryption_option = function() {

    var localctx = new Db_encryption_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 70, tsqlParser.RULE_db_encryption_option);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1117;
        this.match(tsqlParser.ENCRYPTION);
        this.state = 1118;
        this.on_off();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Db_state_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_db_state_option;
    return this;
}

Db_state_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Db_state_optionContext.prototype.constructor = Db_state_optionContext;

Db_state_optionContext.prototype.ONLINE = function() {
    return this.getToken(tsqlParser.ONLINE, 0);
};

Db_state_optionContext.prototype.OFFLINE = function() {
    return this.getToken(tsqlParser.OFFLINE, 0);
};

Db_state_optionContext.prototype.EMERGENCY = function() {
    return this.getToken(tsqlParser.EMERGENCY, 0);
};

Db_state_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDb_state_option(this);
	}
};

Db_state_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDb_state_option(this);
	}
};




tsqlParser.Db_state_optionContext = Db_state_optionContext;

tsqlParser.prototype.db_state_option = function() {

    var localctx = new Db_state_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 72, tsqlParser.RULE_db_state_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1120;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.EMERGENCY || _la===tsqlParser.OFFLINE || _la===tsqlParser.ONLINE)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Db_update_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_db_update_option;
    return this;
}

Db_update_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Db_update_optionContext.prototype.constructor = Db_update_optionContext;

Db_update_optionContext.prototype.READ_ONLY = function() {
    return this.getToken(tsqlParser.READ_ONLY, 0);
};

Db_update_optionContext.prototype.READ_WRITE = function() {
    return this.getToken(tsqlParser.READ_WRITE, 0);
};

Db_update_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDb_update_option(this);
	}
};

Db_update_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDb_update_option(this);
	}
};




tsqlParser.Db_update_optionContext = Db_update_optionContext;

tsqlParser.prototype.db_update_option = function() {

    var localctx = new Db_update_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 74, tsqlParser.RULE_db_update_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1122;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.READ_ONLY || _la===tsqlParser.READ_WRITE)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Db_user_access_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_db_user_access_option;
    return this;
}

Db_user_access_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Db_user_access_optionContext.prototype.constructor = Db_user_access_optionContext;

Db_user_access_optionContext.prototype.SINGLE_USER = function() {
    return this.getToken(tsqlParser.SINGLE_USER, 0);
};

Db_user_access_optionContext.prototype.RESTRICTED_USER = function() {
    return this.getToken(tsqlParser.RESTRICTED_USER, 0);
};

Db_user_access_optionContext.prototype.MULTI_USER = function() {
    return this.getToken(tsqlParser.MULTI_USER, 0);
};

Db_user_access_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDb_user_access_option(this);
	}
};

Db_user_access_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDb_user_access_option(this);
	}
};




tsqlParser.Db_user_access_optionContext = Db_user_access_optionContext;

tsqlParser.prototype.db_user_access_option = function() {

    var localctx = new Db_user_access_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 76, tsqlParser.RULE_db_user_access_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1124;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.MULTI_USER || _la===tsqlParser.RESTRICTED_USER || _la===tsqlParser.SINGLE_USER)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Delayed_durability_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_delayed_durability_option;
    return this;
}

Delayed_durability_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Delayed_durability_optionContext.prototype.constructor = Delayed_durability_optionContext;

Delayed_durability_optionContext.prototype.DELAYED_DURABILITY = function() {
    return this.getToken(tsqlParser.DELAYED_DURABILITY, 0);
};

Delayed_durability_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Delayed_durability_optionContext.prototype.DISABLED = function() {
    return this.getToken(tsqlParser.DISABLED, 0);
};

Delayed_durability_optionContext.prototype.ALLOWED = function() {
    return this.getToken(tsqlParser.ALLOWED, 0);
};

Delayed_durability_optionContext.prototype.FORCED = function() {
    return this.getToken(tsqlParser.FORCED, 0);
};

Delayed_durability_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDelayed_durability_option(this);
	}
};

Delayed_durability_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDelayed_durability_option(this);
	}
};




tsqlParser.Delayed_durability_optionContext = Delayed_durability_optionContext;

tsqlParser.prototype.delayed_durability_option = function() {

    var localctx = new Delayed_durability_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 78, tsqlParser.RULE_delayed_durability_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1126;
        this.match(tsqlParser.DELAYED_DURABILITY);
        this.state = 1127;
        this.match(tsqlParser.EQUAL);
        this.state = 1128;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.ALLOWED || _la===tsqlParser.DISABLED || _la===tsqlParser.FORCED)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function External_access_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_external_access_option;
    return this;
}

External_access_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
External_access_optionContext.prototype.constructor = External_access_optionContext;

External_access_optionContext.prototype.DB_CHAINING = function() {
    return this.getToken(tsqlParser.DB_CHAINING, 0);
};

External_access_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

External_access_optionContext.prototype.TRUSTWORTHY = function() {
    return this.getToken(tsqlParser.TRUSTWORTHY, 0);
};

External_access_optionContext.prototype.DEFAULT_LANGUAGE = function() {
    return this.getToken(tsqlParser.DEFAULT_LANGUAGE, 0);
};

External_access_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

External_access_optionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

External_access_optionContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

External_access_optionContext.prototype.DEFAULT_FULLTEXT_LANGUAGE = function() {
    return this.getToken(tsqlParser.DEFAULT_FULLTEXT_LANGUAGE, 0);
};

External_access_optionContext.prototype.NESTED_TRIGGERS = function() {
    return this.getToken(tsqlParser.NESTED_TRIGGERS, 0);
};

External_access_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

External_access_optionContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

External_access_optionContext.prototype.TRANSFORM_NOISE_WORDS = function() {
    return this.getToken(tsqlParser.TRANSFORM_NOISE_WORDS, 0);
};

External_access_optionContext.prototype.TWO_DIGIT_YEAR_CUTOFF = function() {
    return this.getToken(tsqlParser.TWO_DIGIT_YEAR_CUTOFF, 0);
};

External_access_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

External_access_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExternal_access_option(this);
	}
};

External_access_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExternal_access_option(this);
	}
};




tsqlParser.External_access_optionContext = External_access_optionContext;

tsqlParser.prototype.external_access_option = function() {

    var localctx = new External_access_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 80, tsqlParser.RULE_external_access_option);
    var _la = 0; // Token type
    try {
        this.state = 1155;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.DB_CHAINING:
            this.enterOuterAlt(localctx, 1);
            this.state = 1130;
            this.match(tsqlParser.DB_CHAINING);
            this.state = 1131;
            this.on_off();
            break;
        case tsqlParser.TRUSTWORTHY:
            this.enterOuterAlt(localctx, 2);
            this.state = 1132;
            this.match(tsqlParser.TRUSTWORTHY);
            this.state = 1133;
            this.on_off();
            break;
        case tsqlParser.DEFAULT_LANGUAGE:
            this.enterOuterAlt(localctx, 3);
            this.state = 1134;
            this.match(tsqlParser.DEFAULT_LANGUAGE);
            this.state = 1135;
            this.match(tsqlParser.EQUAL);
            this.state = 1138;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 1136;
                this.r_id();
                break;
            case tsqlParser.STRING:
                this.state = 1137;
                this.match(tsqlParser.STRING);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.DEFAULT_FULLTEXT_LANGUAGE:
            this.enterOuterAlt(localctx, 4);
            this.state = 1140;
            this.match(tsqlParser.DEFAULT_FULLTEXT_LANGUAGE);
            this.state = 1141;
            this.match(tsqlParser.EQUAL);
            this.state = 1144;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 1142;
                this.r_id();
                break;
            case tsqlParser.STRING:
                this.state = 1143;
                this.match(tsqlParser.STRING);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.NESTED_TRIGGERS:
            this.enterOuterAlt(localctx, 5);
            this.state = 1146;
            this.match(tsqlParser.NESTED_TRIGGERS);
            this.state = 1147;
            this.match(tsqlParser.EQUAL);
            this.state = 1148;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TRANSFORM_NOISE_WORDS:
            this.enterOuterAlt(localctx, 6);
            this.state = 1149;
            this.match(tsqlParser.TRANSFORM_NOISE_WORDS);
            this.state = 1150;
            this.match(tsqlParser.EQUAL);
            this.state = 1151;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TWO_DIGIT_YEAR_CUTOFF:
            this.enterOuterAlt(localctx, 7);
            this.state = 1152;
            this.match(tsqlParser.TWO_DIGIT_YEAR_CUTOFF);
            this.state = 1153;
            this.match(tsqlParser.EQUAL);
            this.state = 1154;
            this.match(tsqlParser.DECIMAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Mixed_page_allocation_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_mixed_page_allocation_option;
    return this;
}

Mixed_page_allocation_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Mixed_page_allocation_optionContext.prototype.constructor = Mixed_page_allocation_optionContext;

Mixed_page_allocation_optionContext.prototype.MIXED_PAGE_ALLOCATION = function() {
    return this.getToken(tsqlParser.MIXED_PAGE_ALLOCATION, 0);
};

Mixed_page_allocation_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Mixed_page_allocation_optionContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Mixed_page_allocation_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterMixed_page_allocation_option(this);
	}
};

Mixed_page_allocation_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitMixed_page_allocation_option(this);
	}
};




tsqlParser.Mixed_page_allocation_optionContext = Mixed_page_allocation_optionContext;

tsqlParser.prototype.mixed_page_allocation_option = function() {

    var localctx = new Mixed_page_allocation_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 82, tsqlParser.RULE_mixed_page_allocation_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1157;
        this.match(tsqlParser.MIXED_PAGE_ALLOCATION);
        this.state = 1158;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Parameterization_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_parameterization_option;
    return this;
}

Parameterization_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Parameterization_optionContext.prototype.constructor = Parameterization_optionContext;

Parameterization_optionContext.prototype.PARAMETERIZATION = function() {
    return this.getToken(tsqlParser.PARAMETERIZATION, 0);
};

Parameterization_optionContext.prototype.SIMPLE = function() {
    return this.getToken(tsqlParser.SIMPLE, 0);
};

Parameterization_optionContext.prototype.FORCED = function() {
    return this.getToken(tsqlParser.FORCED, 0);
};

Parameterization_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterParameterization_option(this);
	}
};

Parameterization_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitParameterization_option(this);
	}
};




tsqlParser.Parameterization_optionContext = Parameterization_optionContext;

tsqlParser.prototype.parameterization_option = function() {

    var localctx = new Parameterization_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 84, tsqlParser.RULE_parameterization_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1160;
        this.match(tsqlParser.PARAMETERIZATION);
        this.state = 1161;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.FORCED || _la===tsqlParser.SIMPLE)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Recovery_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_recovery_option;
    return this;
}

Recovery_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Recovery_optionContext.prototype.constructor = Recovery_optionContext;

Recovery_optionContext.prototype.RECOVERY = function() {
    return this.getToken(tsqlParser.RECOVERY, 0);
};

Recovery_optionContext.prototype.FULL = function() {
    return this.getToken(tsqlParser.FULL, 0);
};

Recovery_optionContext.prototype.BULK_LOGGED = function() {
    return this.getToken(tsqlParser.BULK_LOGGED, 0);
};

Recovery_optionContext.prototype.SIMPLE = function() {
    return this.getToken(tsqlParser.SIMPLE, 0);
};

Recovery_optionContext.prototype.TORN_PAGE_DETECTION = function() {
    return this.getToken(tsqlParser.TORN_PAGE_DETECTION, 0);
};

Recovery_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Recovery_optionContext.prototype.PAGE_VERIFY = function() {
    return this.getToken(tsqlParser.PAGE_VERIFY, 0);
};

Recovery_optionContext.prototype.CHECKSUM = function() {
    return this.getToken(tsqlParser.CHECKSUM, 0);
};

Recovery_optionContext.prototype.NONE = function() {
    return this.getToken(tsqlParser.NONE, 0);
};

Recovery_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRecovery_option(this);
	}
};

Recovery_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRecovery_option(this);
	}
};




tsqlParser.Recovery_optionContext = Recovery_optionContext;

tsqlParser.prototype.recovery_option = function() {

    var localctx = new Recovery_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 86, tsqlParser.RULE_recovery_option);
    var _la = 0; // Token type
    try {
        this.state = 1169;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.RECOVERY:
            this.enterOuterAlt(localctx, 1);
            this.state = 1163;
            this.match(tsqlParser.RECOVERY);
            this.state = 1164;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.FULL || _la===tsqlParser.BULK_LOGGED || _la===tsqlParser.SIMPLE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TORN_PAGE_DETECTION:
            this.enterOuterAlt(localctx, 2);
            this.state = 1165;
            this.match(tsqlParser.TORN_PAGE_DETECTION);
            this.state = 1166;
            this.on_off();
            break;
        case tsqlParser.PAGE_VERIFY:
            this.enterOuterAlt(localctx, 3);
            this.state = 1167;
            this.match(tsqlParser.PAGE_VERIFY);
            this.state = 1168;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.NONE || _la===tsqlParser.CHECKSUM || _la===tsqlParser.TORN_PAGE_DETECTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Service_broker_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_service_broker_option;
    return this;
}

Service_broker_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Service_broker_optionContext.prototype.constructor = Service_broker_optionContext;

Service_broker_optionContext.prototype.ENABLE_BROKER = function() {
    return this.getToken(tsqlParser.ENABLE_BROKER, 0);
};

Service_broker_optionContext.prototype.DISABLE_BROKER = function() {
    return this.getToken(tsqlParser.DISABLE_BROKER, 0);
};

Service_broker_optionContext.prototype.NEW_BROKER = function() {
    return this.getToken(tsqlParser.NEW_BROKER, 0);
};

Service_broker_optionContext.prototype.ERROR_BROKER_CONVERSATIONS = function() {
    return this.getToken(tsqlParser.ERROR_BROKER_CONVERSATIONS, 0);
};

Service_broker_optionContext.prototype.HONOR_BROKER_PRIORITY = function() {
    return this.getToken(tsqlParser.HONOR_BROKER_PRIORITY, 0);
};

Service_broker_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Service_broker_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterService_broker_option(this);
	}
};

Service_broker_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitService_broker_option(this);
	}
};




tsqlParser.Service_broker_optionContext = Service_broker_optionContext;

tsqlParser.prototype.service_broker_option = function() {

    var localctx = new Service_broker_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 88, tsqlParser.RULE_service_broker_option);
    try {
        this.state = 1177;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.ENABLE_BROKER:
            this.enterOuterAlt(localctx, 1);
            this.state = 1171;
            this.match(tsqlParser.ENABLE_BROKER);
            break;
        case tsqlParser.DISABLE_BROKER:
            this.enterOuterAlt(localctx, 2);
            this.state = 1172;
            this.match(tsqlParser.DISABLE_BROKER);
            break;
        case tsqlParser.NEW_BROKER:
            this.enterOuterAlt(localctx, 3);
            this.state = 1173;
            this.match(tsqlParser.NEW_BROKER);
            break;
        case tsqlParser.ERROR_BROKER_CONVERSATIONS:
            this.enterOuterAlt(localctx, 4);
            this.state = 1174;
            this.match(tsqlParser.ERROR_BROKER_CONVERSATIONS);
            break;
        case tsqlParser.HONOR_BROKER_PRIORITY:
            this.enterOuterAlt(localctx, 5);
            this.state = 1175;
            this.match(tsqlParser.HONOR_BROKER_PRIORITY);
            this.state = 1176;
            this.on_off();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Snapshot_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_snapshot_option;
    this.MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = null; // Token
    return this;
}

Snapshot_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Snapshot_optionContext.prototype.constructor = Snapshot_optionContext;

Snapshot_optionContext.prototype.ALLOW_SNAPSHOT_ISOLATION = function() {
    return this.getToken(tsqlParser.ALLOW_SNAPSHOT_ISOLATION, 0);
};

Snapshot_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Snapshot_optionContext.prototype.READ_COMMITTED_SNAPSHOT = function() {
    return this.getToken(tsqlParser.READ_COMMITTED_SNAPSHOT, 0);
};

Snapshot_optionContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Snapshot_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Snapshot_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSnapshot_option(this);
	}
};

Snapshot_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSnapshot_option(this);
	}
};




tsqlParser.Snapshot_optionContext = Snapshot_optionContext;

tsqlParser.prototype.snapshot_option = function() {

    var localctx = new Snapshot_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 90, tsqlParser.RULE_snapshot_option);
    var _la = 0; // Token type
    try {
        this.state = 1184;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.ALLOW_SNAPSHOT_ISOLATION:
            this.enterOuterAlt(localctx, 1);
            this.state = 1179;
            this.match(tsqlParser.ALLOW_SNAPSHOT_ISOLATION);
            this.state = 1180;
            this.on_off();
            break;
        case tsqlParser.READ_COMMITTED_SNAPSHOT:
            this.enterOuterAlt(localctx, 2);
            this.state = 1181;
            this.match(tsqlParser.READ_COMMITTED_SNAPSHOT);
            this.state = 1182;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.OFF:
        case tsqlParser.ON:
            this.enterOuterAlt(localctx, 3);
            this.state = 1183;
            localctx.MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
                localctx.MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Sql_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_sql_option;
    return this;
}

Sql_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Sql_optionContext.prototype.constructor = Sql_optionContext;

Sql_optionContext.prototype.ANSI_NULL_DEFAULT = function() {
    return this.getToken(tsqlParser.ANSI_NULL_DEFAULT, 0);
};

Sql_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Sql_optionContext.prototype.ANSI_NULLS = function() {
    return this.getToken(tsqlParser.ANSI_NULLS, 0);
};

Sql_optionContext.prototype.ANSI_PADDING = function() {
    return this.getToken(tsqlParser.ANSI_PADDING, 0);
};

Sql_optionContext.prototype.ANSI_WARNINGS = function() {
    return this.getToken(tsqlParser.ANSI_WARNINGS, 0);
};

Sql_optionContext.prototype.ARITHABORT = function() {
    return this.getToken(tsqlParser.ARITHABORT, 0);
};

Sql_optionContext.prototype.COMPATIBILITY_LEVEL = function() {
    return this.getToken(tsqlParser.COMPATIBILITY_LEVEL, 0);
};

Sql_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Sql_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Sql_optionContext.prototype.CONCAT_NULL_YIELDS_NULL = function() {
    return this.getToken(tsqlParser.CONCAT_NULL_YIELDS_NULL, 0);
};

Sql_optionContext.prototype.NUMERIC_ROUNDABORT = function() {
    return this.getToken(tsqlParser.NUMERIC_ROUNDABORT, 0);
};

Sql_optionContext.prototype.QUOTED_IDENTIFIER = function() {
    return this.getToken(tsqlParser.QUOTED_IDENTIFIER, 0);
};

Sql_optionContext.prototype.RECURSIVE_TRIGGERS = function() {
    return this.getToken(tsqlParser.RECURSIVE_TRIGGERS, 0);
};

Sql_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSql_option(this);
	}
};

Sql_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSql_option(this);
	}
};




tsqlParser.Sql_optionContext = Sql_optionContext;

tsqlParser.prototype.sql_option = function() {

    var localctx = new Sql_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 92, tsqlParser.RULE_sql_option);
    try {
        this.state = 1207;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.ANSI_NULL_DEFAULT:
            this.enterOuterAlt(localctx, 1);
            this.state = 1186;
            this.match(tsqlParser.ANSI_NULL_DEFAULT);
            this.state = 1187;
            this.on_off();
            break;
        case tsqlParser.ANSI_NULLS:
            this.enterOuterAlt(localctx, 2);
            this.state = 1188;
            this.match(tsqlParser.ANSI_NULLS);
            this.state = 1189;
            this.on_off();
            break;
        case tsqlParser.ANSI_PADDING:
            this.enterOuterAlt(localctx, 3);
            this.state = 1190;
            this.match(tsqlParser.ANSI_PADDING);
            this.state = 1191;
            this.on_off();
            break;
        case tsqlParser.ANSI_WARNINGS:
            this.enterOuterAlt(localctx, 4);
            this.state = 1192;
            this.match(tsqlParser.ANSI_WARNINGS);
            this.state = 1193;
            this.on_off();
            break;
        case tsqlParser.ARITHABORT:
            this.enterOuterAlt(localctx, 5);
            this.state = 1194;
            this.match(tsqlParser.ARITHABORT);
            this.state = 1195;
            this.on_off();
            break;
        case tsqlParser.COMPATIBILITY_LEVEL:
            this.enterOuterAlt(localctx, 6);
            this.state = 1196;
            this.match(tsqlParser.COMPATIBILITY_LEVEL);
            this.state = 1197;
            this.match(tsqlParser.EQUAL);
            this.state = 1198;
            this.match(tsqlParser.DECIMAL);
            break;
        case tsqlParser.CONCAT_NULL_YIELDS_NULL:
            this.enterOuterAlt(localctx, 7);
            this.state = 1199;
            this.match(tsqlParser.CONCAT_NULL_YIELDS_NULL);
            this.state = 1200;
            this.on_off();
            break;
        case tsqlParser.NUMERIC_ROUNDABORT:
            this.enterOuterAlt(localctx, 8);
            this.state = 1201;
            this.match(tsqlParser.NUMERIC_ROUNDABORT);
            this.state = 1202;
            this.on_off();
            break;
        case tsqlParser.QUOTED_IDENTIFIER:
            this.enterOuterAlt(localctx, 9);
            this.state = 1203;
            this.match(tsqlParser.QUOTED_IDENTIFIER);
            this.state = 1204;
            this.on_off();
            break;
        case tsqlParser.RECURSIVE_TRIGGERS:
            this.enterOuterAlt(localctx, 10);
            this.state = 1205;
            this.match(tsqlParser.RECURSIVE_TRIGGERS);
            this.state = 1206;
            this.on_off();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Target_recovery_time_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_target_recovery_time_option;
    return this;
}

Target_recovery_time_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Target_recovery_time_optionContext.prototype.constructor = Target_recovery_time_optionContext;

Target_recovery_time_optionContext.prototype.TARGET_RECOVERY_TIME = function() {
    return this.getToken(tsqlParser.TARGET_RECOVERY_TIME, 0);
};

Target_recovery_time_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Target_recovery_time_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Target_recovery_time_optionContext.prototype.SECONDS = function() {
    return this.getToken(tsqlParser.SECONDS, 0);
};

Target_recovery_time_optionContext.prototype.MINUTES = function() {
    return this.getToken(tsqlParser.MINUTES, 0);
};

Target_recovery_time_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTarget_recovery_time_option(this);
	}
};

Target_recovery_time_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTarget_recovery_time_option(this);
	}
};




tsqlParser.Target_recovery_time_optionContext = Target_recovery_time_optionContext;

tsqlParser.prototype.target_recovery_time_option = function() {

    var localctx = new Target_recovery_time_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 94, tsqlParser.RULE_target_recovery_time_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1209;
        this.match(tsqlParser.TARGET_RECOVERY_TIME);
        this.state = 1210;
        this.match(tsqlParser.EQUAL);
        this.state = 1211;
        this.match(tsqlParser.DECIMAL);
        this.state = 1212;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.MINUTES || _la===tsqlParser.SECONDS)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function TerminationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_termination;
    this.seconds = null; // Token
    return this;
}

TerminationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
TerminationContext.prototype.constructor = TerminationContext;

TerminationContext.prototype.ROLLBACK = function() {
    return this.getToken(tsqlParser.ROLLBACK, 0);
};

TerminationContext.prototype.AFTER = function() {
    return this.getToken(tsqlParser.AFTER, 0);
};

TerminationContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

TerminationContext.prototype.IMMEDIATE = function() {
    return this.getToken(tsqlParser.IMMEDIATE, 0);
};

TerminationContext.prototype.NO_WAIT = function() {
    return this.getToken(tsqlParser.NO_WAIT, 0);
};

TerminationContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTermination(this);
	}
};

TerminationContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTermination(this);
	}
};




tsqlParser.TerminationContext = TerminationContext;

tsqlParser.prototype.termination = function() {

    var localctx = new TerminationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 96, tsqlParser.RULE_termination);
    try {
        this.state = 1220;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,156,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1214;
            this.match(tsqlParser.ROLLBACK);
            this.state = 1215;
            this.match(tsqlParser.AFTER);
            this.state = 1216;
            localctx.seconds = this.match(tsqlParser.DECIMAL);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1217;
            this.match(tsqlParser.ROLLBACK);
            this.state = 1218;
            this.match(tsqlParser.IMMEDIATE);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1219;
            this.match(tsqlParser.NO_WAIT);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_indexContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_index;
    this.name = null; // R_idContext
    return this;
}

Drop_indexContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_indexContext.prototype.constructor = Drop_indexContext;

Drop_indexContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_indexContext.prototype.INDEX = function() {
    return this.getToken(tsqlParser.INDEX, 0);
};

Drop_indexContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Drop_indexContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

Drop_indexContext.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Drop_indexContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Drop_indexContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Drop_indexContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_index(this);
	}
};

Drop_indexContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_index(this);
	}
};




tsqlParser.Drop_indexContext = Drop_indexContext;

tsqlParser.prototype.drop_index = function() {

    var localctx = new Drop_indexContext(this, this._ctx, this.state);
    this.enterRule(localctx, 98, tsqlParser.RULE_drop_index);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1222;
        this.match(tsqlParser.DROP);
        this.state = 1223;
        this.match(tsqlParser.INDEX);
        this.state = 1226;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.IF) {
            this.state = 1224;
            this.match(tsqlParser.IF);
            this.state = 1225;
            this.match(tsqlParser.EXISTS);
        }

        this.state = 1228;
        localctx.name = this.r_id();
        this.state = 1231;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ON) {
            this.state = 1229;
            this.match(tsqlParser.ON);
            this.state = 1230;
            this.table_name();
        }

        this.state = 1234;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,159,this._ctx);
        if(la_===1) {
            this.state = 1233;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_procedureContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_procedure;
    return this;
}

Drop_procedureContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_procedureContext.prototype.constructor = Drop_procedureContext;

Drop_procedureContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_procedureContext.prototype.PROCEDURE = function() {
    return this.getToken(tsqlParser.PROCEDURE, 0);
};

Drop_procedureContext.prototype.func_proc_name = function() {
    return this.getTypedRuleContext(Func_proc_nameContext,0);
};

Drop_procedureContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

Drop_procedureContext.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Drop_procedureContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_procedure(this);
	}
};

Drop_procedureContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_procedure(this);
	}
};




tsqlParser.Drop_procedureContext = Drop_procedureContext;

tsqlParser.prototype.drop_procedure = function() {

    var localctx = new Drop_procedureContext(this, this._ctx, this.state);
    this.enterRule(localctx, 100, tsqlParser.RULE_drop_procedure);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1236;
        this.match(tsqlParser.DROP);
        this.state = 1237;
        this.match(tsqlParser.PROCEDURE);
        this.state = 1240;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.IF) {
            this.state = 1238;
            this.match(tsqlParser.IF);
            this.state = 1239;
            this.match(tsqlParser.EXISTS);
        }

        this.state = 1242;
        this.func_proc_name();
        this.state = 1244;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,161,this._ctx);
        if(la_===1) {
            this.state = 1243;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_statisticsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_statistics;
    this.name = null; // R_idContext
    return this;
}

Drop_statisticsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_statisticsContext.prototype.constructor = Drop_statisticsContext;

Drop_statisticsContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_statisticsContext.prototype.STATISTICS = function() {
    return this.getToken(tsqlParser.STATISTICS, 0);
};

Drop_statisticsContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Drop_statisticsContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Drop_statisticsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_statistics(this);
	}
};

Drop_statisticsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_statistics(this);
	}
};




tsqlParser.Drop_statisticsContext = Drop_statisticsContext;

tsqlParser.prototype.drop_statistics = function() {

    var localctx = new Drop_statisticsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 102, tsqlParser.RULE_drop_statistics);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1246;
        this.match(tsqlParser.DROP);
        this.state = 1247;
        this.match(tsqlParser.STATISTICS);
        this.state = 1251;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,162,this._ctx);
        if(la_===1) {
            this.state = 1248;
            this.table_name();
            this.state = 1249;
            this.match(tsqlParser.DOT);

        }
        this.state = 1253;
        localctx.name = this.r_id();
        this.state = 1254;
        this.match(tsqlParser.SEMI);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_tableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_table;
    return this;
}

Drop_tableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_tableContext.prototype.constructor = Drop_tableContext;

Drop_tableContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_tableContext.prototype.TABLE = function() {
    return this.getToken(tsqlParser.TABLE, 0);
};

Drop_tableContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Drop_tableContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

Drop_tableContext.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Drop_tableContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_table(this);
	}
};

Drop_tableContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_table(this);
	}
};




tsqlParser.Drop_tableContext = Drop_tableContext;

tsqlParser.prototype.drop_table = function() {

    var localctx = new Drop_tableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 104, tsqlParser.RULE_drop_table);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1256;
        this.match(tsqlParser.DROP);
        this.state = 1257;
        this.match(tsqlParser.TABLE);
        this.state = 1260;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.IF) {
            this.state = 1258;
            this.match(tsqlParser.IF);
            this.state = 1259;
            this.match(tsqlParser.EXISTS);
        }

        this.state = 1262;
        this.table_name();
        this.state = 1264;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,164,this._ctx);
        if(la_===1) {
            this.state = 1263;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_viewContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_view;
    return this;
}

Drop_viewContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_viewContext.prototype.constructor = Drop_viewContext;

Drop_viewContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_viewContext.prototype.VIEW = function() {
    return this.getToken(tsqlParser.VIEW, 0);
};

Drop_viewContext.prototype.simple_name = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Simple_nameContext);
    } else {
        return this.getTypedRuleContext(Simple_nameContext,i);
    }
};

Drop_viewContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

Drop_viewContext.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Drop_viewContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_view(this);
	}
};

Drop_viewContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_view(this);
	}
};




tsqlParser.Drop_viewContext = Drop_viewContext;

tsqlParser.prototype.drop_view = function() {

    var localctx = new Drop_viewContext(this, this._ctx, this.state);
    this.enterRule(localctx, 106, tsqlParser.RULE_drop_view);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1266;
        this.match(tsqlParser.DROP);
        this.state = 1267;
        this.match(tsqlParser.VIEW);
        this.state = 1270;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.IF) {
            this.state = 1268;
            this.match(tsqlParser.IF);
            this.state = 1269;
            this.match(tsqlParser.EXISTS);
        }

        this.state = 1272;
        this.simple_name();
        this.state = 1277;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 1273;
            this.match(tsqlParser.COMMA);
            this.state = 1274;
            this.simple_name();
            this.state = 1279;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1281;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,167,this._ctx);
        if(la_===1) {
            this.state = 1280;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_typeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_type;
    this.name = null; // Simple_nameContext
    return this;
}

Create_typeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_typeContext.prototype.constructor = Create_typeContext;

Create_typeContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Create_typeContext.prototype.TYPE = function() {
    return this.getToken(tsqlParser.TYPE, 0);
};

Create_typeContext.prototype.FROM = function() {
    return this.getToken(tsqlParser.FROM, 0);
};

Create_typeContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};

Create_typeContext.prototype.default_value = function() {
    return this.getTypedRuleContext(Default_valueContext,0);
};

Create_typeContext.prototype.simple_name = function() {
    return this.getTypedRuleContext(Simple_nameContext,0);
};

Create_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_type(this);
	}
};

Create_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_type(this);
	}
};




tsqlParser.Create_typeContext = Create_typeContext;

tsqlParser.prototype.create_type = function() {

    var localctx = new Create_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 108, tsqlParser.RULE_create_type);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1283;
        this.match(tsqlParser.CREATE);
        this.state = 1284;
        this.match(tsqlParser.TYPE);
        this.state = 1285;
        localctx.name = this.simple_name();
        this.state = 1286;
        this.match(tsqlParser.FROM);
        this.state = 1287;
        this.data_type();
        this.state = 1288;
        this.default_value();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Drop_typeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_drop_type;
    this.name = null; // Simple_nameContext
    return this;
}

Drop_typeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Drop_typeContext.prototype.constructor = Drop_typeContext;

Drop_typeContext.prototype.DROP = function() {
    return this.getToken(tsqlParser.DROP, 0);
};

Drop_typeContext.prototype.TYPE = function() {
    return this.getToken(tsqlParser.TYPE, 0);
};

Drop_typeContext.prototype.simple_name = function() {
    return this.getTypedRuleContext(Simple_nameContext,0);
};

Drop_typeContext.prototype.IF = function() {
    return this.getToken(tsqlParser.IF, 0);
};

Drop_typeContext.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Drop_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDrop_type(this);
	}
};

Drop_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDrop_type(this);
	}
};




tsqlParser.Drop_typeContext = Drop_typeContext;

tsqlParser.prototype.drop_type = function() {

    var localctx = new Drop_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 110, tsqlParser.RULE_drop_type);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1290;
        this.match(tsqlParser.DROP);
        this.state = 1291;
        this.match(tsqlParser.TYPE);
        this.state = 1294;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.IF) {
            this.state = 1292;
            this.match(tsqlParser.IF);
            this.state = 1293;
            this.match(tsqlParser.EXISTS);
        }

        this.state = 1296;
        localctx.name = this.simple_name();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Rowset_function_limitedContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_rowset_function_limited;
    return this;
}

Rowset_function_limitedContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Rowset_function_limitedContext.prototype.constructor = Rowset_function_limitedContext;

Rowset_function_limitedContext.prototype.openquery = function() {
    return this.getTypedRuleContext(OpenqueryContext,0);
};

Rowset_function_limitedContext.prototype.opendatasource = function() {
    return this.getTypedRuleContext(OpendatasourceContext,0);
};

Rowset_function_limitedContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRowset_function_limited(this);
	}
};

Rowset_function_limitedContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRowset_function_limited(this);
	}
};




tsqlParser.Rowset_function_limitedContext = Rowset_function_limitedContext;

tsqlParser.prototype.rowset_function_limited = function() {

    var localctx = new Rowset_function_limitedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 112, tsqlParser.RULE_rowset_function_limited);
    try {
        this.state = 1300;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.OPENQUERY:
            this.enterOuterAlt(localctx, 1);
            this.state = 1298;
            this.openquery();
            break;
        case tsqlParser.OPENDATASOURCE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1299;
            this.opendatasource();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function OpenqueryContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_openquery;
    this.linked_server = null; // R_idContext
    this.query = null; // Token
    return this;
}

OpenqueryContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
OpenqueryContext.prototype.constructor = OpenqueryContext;

OpenqueryContext.prototype.OPENQUERY = function() {
    return this.getToken(tsqlParser.OPENQUERY, 0);
};

OpenqueryContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

OpenqueryContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

OpenqueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOpenquery(this);
	}
};

OpenqueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOpenquery(this);
	}
};




tsqlParser.OpenqueryContext = OpenqueryContext;

tsqlParser.prototype.openquery = function() {

    var localctx = new OpenqueryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 114, tsqlParser.RULE_openquery);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1302;
        this.match(tsqlParser.OPENQUERY);
        this.state = 1303;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 1304;
        localctx.linked_server = this.r_id();
        this.state = 1305;
        this.match(tsqlParser.COMMA);
        this.state = 1306;
        localctx.query = this.match(tsqlParser.STRING);
        this.state = 1307;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function OpendatasourceContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_opendatasource;
    this.provider = null; // Token
    this.init = null; // Token
    this.database = null; // R_idContext
    this.scheme = null; // R_idContext
    this.table = null; // R_idContext
    return this;
}

OpendatasourceContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
OpendatasourceContext.prototype.constructor = OpendatasourceContext;

OpendatasourceContext.prototype.OPENDATASOURCE = function() {
    return this.getToken(tsqlParser.OPENDATASOURCE, 0);
};

OpendatasourceContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.STRING);
    } else {
        return this.getToken(tsqlParser.STRING, i);
    }
};


OpendatasourceContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

OpendatasourceContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOpendatasource(this);
	}
};

OpendatasourceContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOpendatasource(this);
	}
};




tsqlParser.OpendatasourceContext = OpendatasourceContext;

tsqlParser.prototype.opendatasource = function() {

    var localctx = new OpendatasourceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 116, tsqlParser.RULE_opendatasource);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1309;
        this.match(tsqlParser.OPENDATASOURCE);
        this.state = 1310;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 1311;
        localctx.provider = this.match(tsqlParser.STRING);
        this.state = 1312;
        this.match(tsqlParser.COMMA);
        this.state = 1313;
        localctx.init = this.match(tsqlParser.STRING);
        this.state = 1314;
        this.match(tsqlParser.RR_BRACKET);
        this.state = 1315;
        this.match(tsqlParser.DOT);
        this.state = 1317;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
            this.state = 1316;
            localctx.database = this.r_id();
        }

        this.state = 1319;
        this.match(tsqlParser.DOT);
        this.state = 1321;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
            this.state = 1320;
            localctx.scheme = this.r_id();
        }

        this.state = 1323;
        this.match(tsqlParser.DOT);

        this.state = 1324;
        localctx.table = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Declare_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_declare_statement;
    return this;
}

Declare_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declare_statementContext.prototype.constructor = Declare_statementContext;

Declare_statementContext.prototype.DECLARE = function() {
    return this.getToken(tsqlParser.DECLARE, 0);
};

Declare_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Declare_statementContext.prototype.table_type_definition = function() {
    return this.getTypedRuleContext(Table_type_definitionContext,0);
};

Declare_statementContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Declare_statementContext.prototype.declare_local = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Declare_localContext);
    } else {
        return this.getTypedRuleContext(Declare_localContext,i);
    }
};

Declare_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDeclare_statement(this);
	}
};

Declare_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDeclare_statement(this);
	}
};




tsqlParser.Declare_statementContext = Declare_statementContext;

tsqlParser.prototype.declare_statement = function() {

    var localctx = new Declare_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 118, tsqlParser.RULE_declare_statement);
    var _la = 0; // Token type
    try {
        this.state = 1347;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,176,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1326;
            this.match(tsqlParser.DECLARE);
            this.state = 1327;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 1329;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.AS) {
                this.state = 1328;
                this.match(tsqlParser.AS);
            }

            this.state = 1331;
            this.table_type_definition();
            this.state = 1333;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,173,this._ctx);
            if(la_===1) {
                this.state = 1332;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1335;
            this.match(tsqlParser.DECLARE);
            this.state = 1336;
            this.declare_local();
            this.state = 1341;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 1337;
                this.match(tsqlParser.COMMA);
                this.state = 1338;
                this.declare_local();
                this.state = 1343;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1345;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,175,this._ctx);
            if(la_===1) {
                this.state = 1344;
                this.match(tsqlParser.SEMI);

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Cursor_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_cursor_statement;
    return this;
}

Cursor_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Cursor_statementContext.prototype.constructor = Cursor_statementContext;

Cursor_statementContext.prototype.CLOSE = function() {
    return this.getToken(tsqlParser.CLOSE, 0);
};

Cursor_statementContext.prototype.cursor_name = function() {
    return this.getTypedRuleContext(Cursor_nameContext,0);
};

Cursor_statementContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Cursor_statementContext.prototype.DEALLOCATE = function() {
    return this.getToken(tsqlParser.DEALLOCATE, 0);
};

Cursor_statementContext.prototype.declare_cursor = function() {
    return this.getTypedRuleContext(Declare_cursorContext,0);
};

Cursor_statementContext.prototype.fetch_cursor = function() {
    return this.getTypedRuleContext(Fetch_cursorContext,0);
};

Cursor_statementContext.prototype.OPEN = function() {
    return this.getToken(tsqlParser.OPEN, 0);
};

Cursor_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCursor_statement(this);
	}
};

Cursor_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCursor_statement(this);
	}
};




tsqlParser.Cursor_statementContext = Cursor_statementContext;

tsqlParser.prototype.cursor_statement = function() {

    var localctx = new Cursor_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 120, tsqlParser.RULE_cursor_statement);
    try {
        this.state = 1375;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.CLOSE:
            this.enterOuterAlt(localctx, 1);
            this.state = 1349;
            this.match(tsqlParser.CLOSE);
            this.state = 1351;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,177,this._ctx);
            if(la_===1) {
                this.state = 1350;
                this.match(tsqlParser.GLOBAL);

            }
            this.state = 1353;
            this.cursor_name();
            this.state = 1355;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,178,this._ctx);
            if(la_===1) {
                this.state = 1354;
                this.match(tsqlParser.SEMI);

            }
            break;
        case tsqlParser.DEALLOCATE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1357;
            this.match(tsqlParser.DEALLOCATE);
            this.state = 1359;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,179,this._ctx);
            if(la_===1) {
                this.state = 1358;
                this.match(tsqlParser.GLOBAL);

            }
            this.state = 1361;
            this.cursor_name();
            this.state = 1363;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,180,this._ctx);
            if(la_===1) {
                this.state = 1362;
                this.match(tsqlParser.SEMI);

            }
            break;
        case tsqlParser.DECLARE:
            this.enterOuterAlt(localctx, 3);
            this.state = 1365;
            this.declare_cursor();
            break;
        case tsqlParser.FETCH:
            this.enterOuterAlt(localctx, 4);
            this.state = 1366;
            this.fetch_cursor();
            break;
        case tsqlParser.OPEN:
            this.enterOuterAlt(localctx, 5);
            this.state = 1367;
            this.match(tsqlParser.OPEN);
            this.state = 1369;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,181,this._ctx);
            if(la_===1) {
                this.state = 1368;
                this.match(tsqlParser.GLOBAL);

            }
            this.state = 1371;
            this.cursor_name();
            this.state = 1373;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,182,this._ctx);
            if(la_===1) {
                this.state = 1372;
                this.match(tsqlParser.SEMI);

            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Execute_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_execute_statement;
    this.return_status = null; // Token
    return this;
}

Execute_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Execute_statementContext.prototype.constructor = Execute_statementContext;

Execute_statementContext.prototype.EXECUTE = function() {
    return this.getToken(tsqlParser.EXECUTE, 0);
};

Execute_statementContext.prototype.func_proc_name = function() {
    return this.getTypedRuleContext(Func_proc_nameContext,0);
};

Execute_statementContext.prototype.execute_statement_arg = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Execute_statement_argContext);
    } else {
        return this.getTypedRuleContext(Execute_statement_argContext,i);
    }
};

Execute_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Execute_statementContext.prototype.execute_var_string = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Execute_var_stringContext);
    } else {
        return this.getTypedRuleContext(Execute_var_stringContext,i);
    }
};

Execute_statementContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Execute_statementContext.prototype.LOGIN = function() {
    return this.getToken(tsqlParser.LOGIN, 0);
};

Execute_statementContext.prototype.USER = function() {
    return this.getToken(tsqlParser.USER, 0);
};

Execute_statementContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Execute_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExecute_statement(this);
	}
};

Execute_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExecute_statement(this);
	}
};




tsqlParser.Execute_statementContext = Execute_statementContext;

tsqlParser.prototype.execute_statement = function() {

    var localctx = new Execute_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 122, tsqlParser.RULE_execute_statement);
    var _la = 0; // Token type
    try {
        this.state = 1418;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,192,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1377;
            this.match(tsqlParser.EXECUTE);
            this.state = 1380;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.LOCAL_ID) {
                this.state = 1378;
                localctx.return_status = this.match(tsqlParser.LOCAL_ID);
                this.state = 1379;
                this.match(tsqlParser.EQUAL);
            }

            this.state = 1382;
            this.func_proc_name();
            this.state = 1391;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,186,this._ctx);
            if(la_===1) {
                this.state = 1383;
                this.execute_statement_arg();
                this.state = 1388;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===tsqlParser.COMMA) {
                    this.state = 1384;
                    this.match(tsqlParser.COMMA);
                    this.state = 1385;
                    this.execute_statement_arg();
                    this.state = 1390;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }

            }
            this.state = 1394;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,187,this._ctx);
            if(la_===1) {
                this.state = 1393;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1396;
            this.match(tsqlParser.EXECUTE);
            this.state = 1397;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1398;
            this.execute_var_string();
            this.state = 1403;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.PLUS) {
                this.state = 1399;
                this.match(tsqlParser.PLUS);
                this.state = 1400;
                this.execute_var_string();
                this.state = 1405;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 1406;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 1413;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,190,this._ctx);
            if(la_===1) {
                this.state = 1408;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.AS) {
                    this.state = 1407;
                    this.match(tsqlParser.AS);
                }

                this.state = 1410;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.USER || _la===tsqlParser.LOGIN)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 1411;
                this.match(tsqlParser.EQUAL);
                this.state = 1412;
                this.match(tsqlParser.STRING);

            }
            this.state = 1416;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,191,this._ctx);
            if(la_===1) {
                this.state = 1415;
                this.match(tsqlParser.SEMI);

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Execute_statement_argContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_execute_statement_arg;
    this.parameter = null; // Token
    return this;
}

Execute_statement_argContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Execute_statement_argContext.prototype.constructor = Execute_statement_argContext;

Execute_statement_argContext.prototype.DEFAULT = function() {
    return this.getToken(tsqlParser.DEFAULT, 0);
};

Execute_statement_argContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Execute_statement_argContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Execute_statement_argContext.prototype.constant_LOCAL_ID = function() {
    return this.getTypedRuleContext(Constant_LOCAL_IDContext,0);
};

Execute_statement_argContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Execute_statement_argContext.prototype.OUTPUT = function() {
    return this.getToken(tsqlParser.OUTPUT, 0);
};

Execute_statement_argContext.prototype.OUT = function() {
    return this.getToken(tsqlParser.OUT, 0);
};

Execute_statement_argContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExecute_statement_arg(this);
	}
};

Execute_statement_argContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExecute_statement_arg(this);
	}
};




tsqlParser.Execute_statement_argContext = Execute_statement_argContext;

tsqlParser.prototype.execute_statement_arg = function() {

    var localctx = new Execute_statement_argContext(this, this._ctx, this.state);
    this.enterRule(localctx, 124, tsqlParser.RULE_execute_statement_arg);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1422;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,193,this._ctx);
        if(la_===1) {
            this.state = 1420;
            localctx.parameter = this.match(tsqlParser.LOCAL_ID);
            this.state = 1421;
            this.match(tsqlParser.EQUAL);

        }
        this.state = 1433;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.LOCAL_ID:
        case tsqlParser.DECIMAL:
        case tsqlParser.ID:
        case tsqlParser.STRING:
        case tsqlParser.BINARY:
        case tsqlParser.FLOAT:
        case tsqlParser.REAL:
        case tsqlParser.DOLLAR:
        case tsqlParser.PLUS:
        case tsqlParser.MINUS:
            this.state = 1426;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.LOCAL_ID:
            case tsqlParser.DECIMAL:
            case tsqlParser.STRING:
            case tsqlParser.BINARY:
            case tsqlParser.FLOAT:
            case tsqlParser.REAL:
            case tsqlParser.DOLLAR:
            case tsqlParser.PLUS:
            case tsqlParser.MINUS:
                this.state = 1424;
                this.constant_LOCAL_ID();
                break;
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 1425;
                this.r_id();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1429;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,195,this._ctx);
            if(la_===1) {
                this.state = 1428;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.OUT || _la===tsqlParser.OUTPUT)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }

            }
            break;
        case tsqlParser.DEFAULT:
            this.state = 1431;
            this.match(tsqlParser.DEFAULT);
            break;
        case tsqlParser.NULL:
            this.state = 1432;
            this.match(tsqlParser.NULL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Execute_var_stringContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_execute_var_string;
    return this;
}

Execute_var_stringContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Execute_var_stringContext.prototype.constructor = Execute_var_stringContext;

Execute_var_stringContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Execute_var_stringContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Execute_var_stringContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExecute_var_string(this);
	}
};

Execute_var_stringContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExecute_var_string(this);
	}
};




tsqlParser.Execute_var_stringContext = Execute_var_stringContext;

tsqlParser.prototype.execute_var_string = function() {

    var localctx = new Execute_var_stringContext(this, this._ctx, this.state);
    this.enterRule(localctx, 126, tsqlParser.RULE_execute_var_string);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1435;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.LOCAL_ID || _la===tsqlParser.STRING)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Security_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_security_statement;
    this.on_id = null; // Table_nameContext
    this.to_principal = null; // R_idContext
    this.as_principal = null; // R_idContext
    return this;
}

Security_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Security_statementContext.prototype.constructor = Security_statementContext;

Security_statementContext.prototype.execute_clause = function() {
    return this.getTypedRuleContext(Execute_clauseContext,0);
};

Security_statementContext.prototype.GRANT = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.GRANT);
    } else {
        return this.getToken(tsqlParser.GRANT, i);
    }
};


Security_statementContext.prototype.TO = function() {
    return this.getToken(tsqlParser.TO, 0);
};

Security_statementContext.prototype.ALL = function() {
    return this.getToken(tsqlParser.ALL, 0);
};

Security_statementContext.prototype.grant_permission = function() {
    return this.getTypedRuleContext(Grant_permissionContext,0);
};

Security_statementContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Security_statementContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Security_statementContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Security_statementContext.prototype.OPTION = function() {
    return this.getToken(tsqlParser.OPTION, 0);
};

Security_statementContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Security_statementContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Security_statementContext.prototype.PRIVILEGES = function() {
    return this.getToken(tsqlParser.PRIVILEGES, 0);
};

Security_statementContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Security_statementContext.prototype.REVERT = function() {
    return this.getToken(tsqlParser.REVERT, 0);
};

Security_statementContext.prototype.COOKIE = function() {
    return this.getToken(tsqlParser.COOKIE, 0);
};

Security_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Security_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSecurity_statement(this);
	}
};

Security_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSecurity_statement(this);
	}
};




tsqlParser.Security_statementContext = Security_statementContext;

tsqlParser.prototype.security_statement = function() {

    var localctx = new Security_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 128, tsqlParser.RULE_security_statement);
    var _la = 0; // Token type
    try {
        this.state = 1485;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.EXECUTE:
            this.enterOuterAlt(localctx, 1);
            this.state = 1437;
            this.execute_clause();
            this.state = 1439;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,197,this._ctx);
            if(la_===1) {
                this.state = 1438;
                this.match(tsqlParser.SEMI);

            }
            break;
        case tsqlParser.GRANT:
            this.enterOuterAlt(localctx, 2);
            this.state = 1441;
            this.match(tsqlParser.GRANT);
            this.state = 1453;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.ALL:
                this.state = 1442;
                this.match(tsqlParser.ALL);
                this.state = 1444;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.PRIVILEGES) {
                    this.state = 1443;
                    this.match(tsqlParser.PRIVILEGES);
                }

                break;
            case tsqlParser.ALTER:
            case tsqlParser.CREATE:
            case tsqlParser.EXECUTE:
            case tsqlParser.INSERT:
            case tsqlParser.REFERENCES:
            case tsqlParser.SELECT:
            case tsqlParser.VIEW:
            case tsqlParser.CONTROL:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.SHOWPLAN:
            case tsqlParser.TAKE:
                this.state = 1446;
                this.grant_permission();
                this.state = 1451;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.LR_BRACKET) {
                    this.state = 1447;
                    this.match(tsqlParser.LR_BRACKET);
                    this.state = 1448;
                    this.column_name_list();
                    this.state = 1449;
                    this.match(tsqlParser.RR_BRACKET);
                }

                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1457;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ON) {
                this.state = 1455;
                this.match(tsqlParser.ON);
                this.state = 1456;
                localctx.on_id = this.table_name();
            }

            this.state = 1459;
            this.match(tsqlParser.TO);

            this.state = 1460;
            localctx.to_principal = this.r_id();
            this.state = 1464;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,202,this._ctx);
            if(la_===1) {
                this.state = 1461;
                this.match(tsqlParser.WITH);
                this.state = 1462;
                this.match(tsqlParser.GRANT);
                this.state = 1463;
                this.match(tsqlParser.OPTION);

            }
            this.state = 1468;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.AS) {
                this.state = 1466;
                this.match(tsqlParser.AS);
                this.state = 1467;
                localctx.as_principal = this.r_id();
            }

            this.state = 1471;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,204,this._ctx);
            if(la_===1) {
                this.state = 1470;
                this.match(tsqlParser.SEMI);

            }
            break;
        case tsqlParser.REVERT:
            this.enterOuterAlt(localctx, 3);
            this.state = 1473;
            this.match(tsqlParser.REVERT);
            this.state = 1480;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,205,this._ctx);
            if(la_===1) {
                this.state = 1474;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 1475;
                this.match(tsqlParser.WITH);
                this.state = 1476;
                this.match(tsqlParser.COOKIE);
                this.state = 1477;
                this.match(tsqlParser.EQUAL);
                this.state = 1478;
                this.match(tsqlParser.LOCAL_ID);
                this.state = 1479;
                this.match(tsqlParser.RR_BRACKET);

            }
            this.state = 1483;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,206,this._ctx);
            if(la_===1) {
                this.state = 1482;
                this.match(tsqlParser.SEMI);

            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Grant_permissionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_grant_permission;
    return this;
}

Grant_permissionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Grant_permissionContext.prototype.constructor = Grant_permissionContext;

Grant_permissionContext.prototype.EXECUTE = function() {
    return this.getToken(tsqlParser.EXECUTE, 0);
};

Grant_permissionContext.prototype.VIEW = function() {
    return this.getToken(tsqlParser.VIEW, 0);
};

Grant_permissionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Grant_permissionContext.prototype.TAKE = function() {
    return this.getToken(tsqlParser.TAKE, 0);
};

Grant_permissionContext.prototype.CONTROL = function() {
    return this.getToken(tsqlParser.CONTROL, 0);
};

Grant_permissionContext.prototype.CREATE = function() {
    return this.getToken(tsqlParser.CREATE, 0);
};

Grant_permissionContext.prototype.TABLE = function() {
    return this.getToken(tsqlParser.TABLE, 0);
};

Grant_permissionContext.prototype.SHOWPLAN = function() {
    return this.getToken(tsqlParser.SHOWPLAN, 0);
};

Grant_permissionContext.prototype.IMPERSONATE = function() {
    return this.getToken(tsqlParser.IMPERSONATE, 0);
};

Grant_permissionContext.prototype.SELECT = function() {
    return this.getToken(tsqlParser.SELECT, 0);
};

Grant_permissionContext.prototype.REFERENCES = function() {
    return this.getToken(tsqlParser.REFERENCES, 0);
};

Grant_permissionContext.prototype.INSERT = function() {
    return this.getToken(tsqlParser.INSERT, 0);
};

Grant_permissionContext.prototype.ALTER = function() {
    return this.getToken(tsqlParser.ALTER, 0);
};

Grant_permissionContext.prototype.DATABASE = function() {
    return this.getToken(tsqlParser.DATABASE, 0);
};

Grant_permissionContext.prototype.ANY = function() {
    return this.getToken(tsqlParser.ANY, 0);
};

Grant_permissionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterGrant_permission(this);
	}
};

Grant_permissionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitGrant_permission(this);
	}
};




tsqlParser.Grant_permissionContext = Grant_permissionContext;

tsqlParser.prototype.grant_permission = function() {

    var localctx = new Grant_permissionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 130, tsqlParser.RULE_grant_permission);
    var _la = 0; // Token type
    try {
        this.state = 1513;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.EXECUTE:
            this.enterOuterAlt(localctx, 1);
            this.state = 1487;
            this.match(tsqlParser.EXECUTE);
            break;
        case tsqlParser.VIEW:
            this.enterOuterAlt(localctx, 2);
            this.state = 1488;
            this.match(tsqlParser.VIEW);
            this.state = 1489;
            this.r_id();
            break;
        case tsqlParser.TAKE:
            this.enterOuterAlt(localctx, 3);
            this.state = 1490;
            this.match(tsqlParser.TAKE);
            this.state = 1491;
            this.r_id();
            break;
        case tsqlParser.CONTROL:
            this.enterOuterAlt(localctx, 4);
            this.state = 1492;
            this.match(tsqlParser.CONTROL);
            this.state = 1494;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 1493;
                this.r_id();
            }

            break;
        case tsqlParser.CREATE:
            this.enterOuterAlt(localctx, 5);
            this.state = 1496;
            this.match(tsqlParser.CREATE);
            this.state = 1497;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TABLE || _la===tsqlParser.VIEW)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.SHOWPLAN:
            this.enterOuterAlt(localctx, 6);
            this.state = 1498;
            this.match(tsqlParser.SHOWPLAN);
            break;
        case tsqlParser.IMPERSONATE:
            this.enterOuterAlt(localctx, 7);
            this.state = 1499;
            this.match(tsqlParser.IMPERSONATE);
            break;
        case tsqlParser.SELECT:
            this.enterOuterAlt(localctx, 8);
            this.state = 1500;
            this.match(tsqlParser.SELECT);
            break;
        case tsqlParser.REFERENCES:
            this.enterOuterAlt(localctx, 9);
            this.state = 1501;
            this.match(tsqlParser.REFERENCES);
            break;
        case tsqlParser.INSERT:
            this.enterOuterAlt(localctx, 10);
            this.state = 1502;
            this.match(tsqlParser.INSERT);
            break;
        case tsqlParser.ALTER:
            this.enterOuterAlt(localctx, 11);
            this.state = 1503;
            this.match(tsqlParser.ALTER);
            this.state = 1511;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ANY || _la===tsqlParser.DATABASE || _la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 1505;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.ANY) {
                    this.state = 1504;
                    this.match(tsqlParser.ANY);
                }

                this.state = 1509;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case tsqlParser.FORCESEEK:
                case tsqlParser.ABSOLUTE:
                case tsqlParser.APPLY:
                case tsqlParser.AUTO:
                case tsqlParser.AVG:
                case tsqlParser.BASE64:
                case tsqlParser.CALLER:
                case tsqlParser.CAST:
                case tsqlParser.CATCH:
                case tsqlParser.CHECKSUM_AGG:
                case tsqlParser.COMMITTED:
                case tsqlParser.CONCAT:
                case tsqlParser.CONTROL:
                case tsqlParser.COOKIE:
                case tsqlParser.COUNT:
                case tsqlParser.COUNT_BIG:
                case tsqlParser.DELAY:
                case tsqlParser.DELETED:
                case tsqlParser.DENSE_RANK:
                case tsqlParser.DISABLE:
                case tsqlParser.DYNAMIC:
                case tsqlParser.ENCRYPTION:
                case tsqlParser.EXPAND:
                case tsqlParser.FAST:
                case tsqlParser.FAST_FORWARD:
                case tsqlParser.FIRST:
                case tsqlParser.FOLLOWING:
                case tsqlParser.FORCE:
                case tsqlParser.FORCED:
                case tsqlParser.FORWARD_ONLY:
                case tsqlParser.FULLSCAN:
                case tsqlParser.GLOBAL:
                case tsqlParser.GO:
                case tsqlParser.GROUPING:
                case tsqlParser.GROUPING_ID:
                case tsqlParser.HASH:
                case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
                case tsqlParser.IMPERSONATE:
                case tsqlParser.INSENSITIVE:
                case tsqlParser.INSERTED:
                case tsqlParser.ISOLATION:
                case tsqlParser.KEEP:
                case tsqlParser.KEEPFIXED:
                case tsqlParser.KEYSET:
                case tsqlParser.LAST:
                case tsqlParser.LEVEL:
                case tsqlParser.LOCAL:
                case tsqlParser.LOCK_ESCALATION:
                case tsqlParser.LOGIN:
                case tsqlParser.LOOP:
                case tsqlParser.MARK:
                case tsqlParser.MAX:
                case tsqlParser.MAXDOP:
                case tsqlParser.MAXRECURSION:
                case tsqlParser.MIN:
                case tsqlParser.MODIFY:
                case tsqlParser.NAME:
                case tsqlParser.NEXT:
                case tsqlParser.NOCOUNT:
                case tsqlParser.NOEXPAND:
                case tsqlParser.NORECOMPUTE:
                case tsqlParser.NTILE:
                case tsqlParser.NUMBER:
                case tsqlParser.OFFSET:
                case tsqlParser.ONLINE:
                case tsqlParser.ONLY:
                case tsqlParser.OPTIMISTIC:
                case tsqlParser.OPTIMIZE:
                case tsqlParser.OUT:
                case tsqlParser.OUTPUT:
                case tsqlParser.OWNER:
                case tsqlParser.PARAMETERIZATION:
                case tsqlParser.PARTITION:
                case tsqlParser.PATH:
                case tsqlParser.PRECEDING:
                case tsqlParser.PRIOR:
                case tsqlParser.PRIVILEGES:
                case tsqlParser.RANGE:
                case tsqlParser.RANK:
                case tsqlParser.READONLY:
                case tsqlParser.READ_ONLY:
                case tsqlParser.RECOMPILE:
                case tsqlParser.RELATIVE:
                case tsqlParser.REMOTE:
                case tsqlParser.REPEATABLE:
                case tsqlParser.ROBUST:
                case tsqlParser.ROOT:
                case tsqlParser.ROW:
                case tsqlParser.ROWGUID:
                case tsqlParser.ROWS:
                case tsqlParser.ROW_NUMBER:
                case tsqlParser.SAMPLE:
                case tsqlParser.SCHEMABINDING:
                case tsqlParser.SCROLL:
                case tsqlParser.SCROLL_LOCKS:
                case tsqlParser.SELF:
                case tsqlParser.SERIALIZABLE:
                case tsqlParser.SIMPLE:
                case tsqlParser.SIZE:
                case tsqlParser.SNAPSHOT:
                case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
                case tsqlParser.STATIC:
                case tsqlParser.STATS_STREAM:
                case tsqlParser.STDEV:
                case tsqlParser.STDEVP:
                case tsqlParser.SUM:
                case tsqlParser.TEXTIMAGE_ON:
                case tsqlParser.THROW:
                case tsqlParser.TIES:
                case tsqlParser.TIME:
                case tsqlParser.TRY:
                case tsqlParser.TYPE:
                case tsqlParser.TYPE_WARNING:
                case tsqlParser.UNBOUNDED:
                case tsqlParser.UNCOMMITTED:
                case tsqlParser.UNKNOWN:
                case tsqlParser.USING:
                case tsqlParser.VAR:
                case tsqlParser.VARP:
                case tsqlParser.VIEWS:
                case tsqlParser.VIEW_METADATA:
                case tsqlParser.WORK:
                case tsqlParser.XML:
                case tsqlParser.XMLNAMESPACES:
                case tsqlParser.DOUBLE_QUOTE_ID:
                case tsqlParser.SQUARE_BRACKET_ID:
                case tsqlParser.ID:
                    this.state = 1507;
                    this.r_id();
                    break;
                case tsqlParser.DATABASE:
                    this.state = 1508;
                    this.match(tsqlParser.DATABASE);
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
            }

            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Set_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_set_statement;
    this.member_name = null; // R_idContext
    return this;
}

Set_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Set_statementContext.prototype.constructor = Set_statementContext;

Set_statementContext.prototype.SET = function() {
    return this.getToken(tsqlParser.SET, 0);
};

Set_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Set_statementContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Set_statementContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Set_statementContext.prototype.assignment_operator = function() {
    return this.getTypedRuleContext(Assignment_operatorContext,0);
};

Set_statementContext.prototype.CURSOR = function() {
    return this.getToken(tsqlParser.CURSOR, 0);
};

Set_statementContext.prototype.declare_set_cursor_common = function() {
    return this.getTypedRuleContext(Declare_set_cursor_commonContext,0);
};

Set_statementContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Set_statementContext.prototype.READ = function() {
    return this.getToken(tsqlParser.READ, 0);
};

Set_statementContext.prototype.ONLY = function() {
    return this.getToken(tsqlParser.ONLY, 0);
};

Set_statementContext.prototype.UPDATE = function() {
    return this.getToken(tsqlParser.UPDATE, 0);
};

Set_statementContext.prototype.OF = function() {
    return this.getToken(tsqlParser.OF, 0);
};

Set_statementContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Set_statementContext.prototype.set_special = function() {
    return this.getTypedRuleContext(Set_specialContext,0);
};

Set_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSet_statement(this);
	}
};

Set_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSet_statement(this);
	}
};




tsqlParser.Set_statementContext = Set_statementContext;

tsqlParser.prototype.set_statement = function() {

    var localctx = new Set_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 132, tsqlParser.RULE_set_statement);
    var _la = 0; // Token type
    try {
        this.state = 1554;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,220,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1515;
            this.match(tsqlParser.SET);
            this.state = 1516;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 1519;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.DOT) {
                this.state = 1517;
                this.match(tsqlParser.DOT);
                this.state = 1518;
                localctx.member_name = this.r_id();
            }

            this.state = 1521;
            this.match(tsqlParser.EQUAL);
            this.state = 1522;
            this.expression(0);
            this.state = 1524;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,214,this._ctx);
            if(la_===1) {
                this.state = 1523;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1526;
            this.match(tsqlParser.SET);
            this.state = 1527;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 1528;
            this.assignment_operator();
            this.state = 1529;
            this.expression(0);
            this.state = 1531;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,215,this._ctx);
            if(la_===1) {
                this.state = 1530;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1533;
            this.match(tsqlParser.SET);
            this.state = 1534;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 1535;
            this.match(tsqlParser.EQUAL);
            this.state = 1536;
            this.match(tsqlParser.CURSOR);
            this.state = 1537;
            this.declare_set_cursor_common();
            this.state = 1548;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FOR) {
                this.state = 1538;
                this.match(tsqlParser.FOR);
                this.state = 1546;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case tsqlParser.READ:
                    this.state = 1539;
                    this.match(tsqlParser.READ);
                    this.state = 1540;
                    this.match(tsqlParser.ONLY);
                    break;
                case tsqlParser.UPDATE:
                    this.state = 1541;
                    this.match(tsqlParser.UPDATE);
                    this.state = 1544;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    if(_la===tsqlParser.OF) {
                        this.state = 1542;
                        this.match(tsqlParser.OF);
                        this.state = 1543;
                        this.column_name_list();
                    }

                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
            }

            this.state = 1551;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,219,this._ctx);
            if(la_===1) {
                this.state = 1550;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1553;
            this.set_special();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Transaction_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_transaction_statement;
    return this;
}

Transaction_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Transaction_statementContext.prototype.constructor = Transaction_statementContext;

Transaction_statementContext.prototype.BEGIN = function() {
    return this.getToken(tsqlParser.BEGIN, 0);
};

Transaction_statementContext.prototype.DISTRIBUTED = function() {
    return this.getToken(tsqlParser.DISTRIBUTED, 0);
};

Transaction_statementContext.prototype.TRAN = function() {
    return this.getToken(tsqlParser.TRAN, 0);
};

Transaction_statementContext.prototype.TRANSACTION = function() {
    return this.getToken(tsqlParser.TRANSACTION, 0);
};

Transaction_statementContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Transaction_statementContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Transaction_statementContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Transaction_statementContext.prototype.MARK = function() {
    return this.getToken(tsqlParser.MARK, 0);
};

Transaction_statementContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Transaction_statementContext.prototype.COMMIT = function() {
    return this.getToken(tsqlParser.COMMIT, 0);
};

Transaction_statementContext.prototype.DELAYED_DURABILITY = function() {
    return this.getToken(tsqlParser.DELAYED_DURABILITY, 0);
};

Transaction_statementContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Transaction_statementContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Transaction_statementContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Transaction_statementContext.prototype.WORK = function() {
    return this.getToken(tsqlParser.WORK, 0);
};

Transaction_statementContext.prototype.ROLLBACK = function() {
    return this.getToken(tsqlParser.ROLLBACK, 0);
};

Transaction_statementContext.prototype.SAVE = function() {
    return this.getToken(tsqlParser.SAVE, 0);
};

Transaction_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTransaction_statement(this);
	}
};

Transaction_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTransaction_statement(this);
	}
};




tsqlParser.Transaction_statementContext = Transaction_statementContext;

tsqlParser.prototype.transaction_statement = function() {

    var localctx = new Transaction_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 134, tsqlParser.RULE_transaction_statement);
    var _la = 0; // Token type
    try {
        this.state = 1633;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,239,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1556;
            this.match(tsqlParser.BEGIN);
            this.state = 1557;
            this.match(tsqlParser.DISTRIBUTED);
            this.state = 1558;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TRAN || _la===tsqlParser.TRANSACTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1561;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,221,this._ctx);
            if(la_===1) {
                this.state = 1559;
                this.r_id();

            } else if(la_===2) {
                this.state = 1560;
                this.match(tsqlParser.LOCAL_ID);

            }
            this.state = 1564;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,222,this._ctx);
            if(la_===1) {
                this.state = 1563;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1566;
            this.match(tsqlParser.BEGIN);
            this.state = 1567;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TRAN || _la===tsqlParser.TRANSACTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1577;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,225,this._ctx);
            if(la_===1) {
                this.state = 1570;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case tsqlParser.FORCESEEK:
                case tsqlParser.ABSOLUTE:
                case tsqlParser.APPLY:
                case tsqlParser.AUTO:
                case tsqlParser.AVG:
                case tsqlParser.BASE64:
                case tsqlParser.CALLER:
                case tsqlParser.CAST:
                case tsqlParser.CATCH:
                case tsqlParser.CHECKSUM_AGG:
                case tsqlParser.COMMITTED:
                case tsqlParser.CONCAT:
                case tsqlParser.CONTROL:
                case tsqlParser.COOKIE:
                case tsqlParser.COUNT:
                case tsqlParser.COUNT_BIG:
                case tsqlParser.DELAY:
                case tsqlParser.DELETED:
                case tsqlParser.DENSE_RANK:
                case tsqlParser.DISABLE:
                case tsqlParser.DYNAMIC:
                case tsqlParser.ENCRYPTION:
                case tsqlParser.EXPAND:
                case tsqlParser.FAST:
                case tsqlParser.FAST_FORWARD:
                case tsqlParser.FIRST:
                case tsqlParser.FOLLOWING:
                case tsqlParser.FORCE:
                case tsqlParser.FORCED:
                case tsqlParser.FORWARD_ONLY:
                case tsqlParser.FULLSCAN:
                case tsqlParser.GLOBAL:
                case tsqlParser.GO:
                case tsqlParser.GROUPING:
                case tsqlParser.GROUPING_ID:
                case tsqlParser.HASH:
                case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
                case tsqlParser.IMPERSONATE:
                case tsqlParser.INSENSITIVE:
                case tsqlParser.INSERTED:
                case tsqlParser.ISOLATION:
                case tsqlParser.KEEP:
                case tsqlParser.KEEPFIXED:
                case tsqlParser.KEYSET:
                case tsqlParser.LAST:
                case tsqlParser.LEVEL:
                case tsqlParser.LOCAL:
                case tsqlParser.LOCK_ESCALATION:
                case tsqlParser.LOGIN:
                case tsqlParser.LOOP:
                case tsqlParser.MARK:
                case tsqlParser.MAX:
                case tsqlParser.MAXDOP:
                case tsqlParser.MAXRECURSION:
                case tsqlParser.MIN:
                case tsqlParser.MODIFY:
                case tsqlParser.NAME:
                case tsqlParser.NEXT:
                case tsqlParser.NOCOUNT:
                case tsqlParser.NOEXPAND:
                case tsqlParser.NORECOMPUTE:
                case tsqlParser.NTILE:
                case tsqlParser.NUMBER:
                case tsqlParser.OFFSET:
                case tsqlParser.ONLINE:
                case tsqlParser.ONLY:
                case tsqlParser.OPTIMISTIC:
                case tsqlParser.OPTIMIZE:
                case tsqlParser.OUT:
                case tsqlParser.OUTPUT:
                case tsqlParser.OWNER:
                case tsqlParser.PARAMETERIZATION:
                case tsqlParser.PARTITION:
                case tsqlParser.PATH:
                case tsqlParser.PRECEDING:
                case tsqlParser.PRIOR:
                case tsqlParser.PRIVILEGES:
                case tsqlParser.RANGE:
                case tsqlParser.RANK:
                case tsqlParser.READONLY:
                case tsqlParser.READ_ONLY:
                case tsqlParser.RECOMPILE:
                case tsqlParser.RELATIVE:
                case tsqlParser.REMOTE:
                case tsqlParser.REPEATABLE:
                case tsqlParser.ROBUST:
                case tsqlParser.ROOT:
                case tsqlParser.ROW:
                case tsqlParser.ROWGUID:
                case tsqlParser.ROWS:
                case tsqlParser.ROW_NUMBER:
                case tsqlParser.SAMPLE:
                case tsqlParser.SCHEMABINDING:
                case tsqlParser.SCROLL:
                case tsqlParser.SCROLL_LOCKS:
                case tsqlParser.SELF:
                case tsqlParser.SERIALIZABLE:
                case tsqlParser.SIMPLE:
                case tsqlParser.SIZE:
                case tsqlParser.SNAPSHOT:
                case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
                case tsqlParser.STATIC:
                case tsqlParser.STATS_STREAM:
                case tsqlParser.STDEV:
                case tsqlParser.STDEVP:
                case tsqlParser.SUM:
                case tsqlParser.TEXTIMAGE_ON:
                case tsqlParser.THROW:
                case tsqlParser.TIES:
                case tsqlParser.TIME:
                case tsqlParser.TRY:
                case tsqlParser.TYPE:
                case tsqlParser.TYPE_WARNING:
                case tsqlParser.UNBOUNDED:
                case tsqlParser.UNCOMMITTED:
                case tsqlParser.UNKNOWN:
                case tsqlParser.USING:
                case tsqlParser.VAR:
                case tsqlParser.VARP:
                case tsqlParser.VIEWS:
                case tsqlParser.VIEW_METADATA:
                case tsqlParser.WORK:
                case tsqlParser.XML:
                case tsqlParser.XMLNAMESPACES:
                case tsqlParser.DOUBLE_QUOTE_ID:
                case tsqlParser.SQUARE_BRACKET_ID:
                case tsqlParser.ID:
                    this.state = 1568;
                    this.r_id();
                    break;
                case tsqlParser.LOCAL_ID:
                    this.state = 1569;
                    this.match(tsqlParser.LOCAL_ID);
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
                this.state = 1575;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,224,this._ctx);
                if(la_===1) {
                    this.state = 1572;
                    this.match(tsqlParser.WITH);
                    this.state = 1573;
                    this.match(tsqlParser.MARK);
                    this.state = 1574;
                    this.match(tsqlParser.STRING);

                }

            }
            this.state = 1580;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,226,this._ctx);
            if(la_===1) {
                this.state = 1579;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1582;
            this.match(tsqlParser.COMMIT);
            this.state = 1583;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TRAN || _la===tsqlParser.TRANSACTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1596;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,229,this._ctx);
            if(la_===1) {
                this.state = 1586;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case tsqlParser.FORCESEEK:
                case tsqlParser.ABSOLUTE:
                case tsqlParser.APPLY:
                case tsqlParser.AUTO:
                case tsqlParser.AVG:
                case tsqlParser.BASE64:
                case tsqlParser.CALLER:
                case tsqlParser.CAST:
                case tsqlParser.CATCH:
                case tsqlParser.CHECKSUM_AGG:
                case tsqlParser.COMMITTED:
                case tsqlParser.CONCAT:
                case tsqlParser.CONTROL:
                case tsqlParser.COOKIE:
                case tsqlParser.COUNT:
                case tsqlParser.COUNT_BIG:
                case tsqlParser.DELAY:
                case tsqlParser.DELETED:
                case tsqlParser.DENSE_RANK:
                case tsqlParser.DISABLE:
                case tsqlParser.DYNAMIC:
                case tsqlParser.ENCRYPTION:
                case tsqlParser.EXPAND:
                case tsqlParser.FAST:
                case tsqlParser.FAST_FORWARD:
                case tsqlParser.FIRST:
                case tsqlParser.FOLLOWING:
                case tsqlParser.FORCE:
                case tsqlParser.FORCED:
                case tsqlParser.FORWARD_ONLY:
                case tsqlParser.FULLSCAN:
                case tsqlParser.GLOBAL:
                case tsqlParser.GO:
                case tsqlParser.GROUPING:
                case tsqlParser.GROUPING_ID:
                case tsqlParser.HASH:
                case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
                case tsqlParser.IMPERSONATE:
                case tsqlParser.INSENSITIVE:
                case tsqlParser.INSERTED:
                case tsqlParser.ISOLATION:
                case tsqlParser.KEEP:
                case tsqlParser.KEEPFIXED:
                case tsqlParser.KEYSET:
                case tsqlParser.LAST:
                case tsqlParser.LEVEL:
                case tsqlParser.LOCAL:
                case tsqlParser.LOCK_ESCALATION:
                case tsqlParser.LOGIN:
                case tsqlParser.LOOP:
                case tsqlParser.MARK:
                case tsqlParser.MAX:
                case tsqlParser.MAXDOP:
                case tsqlParser.MAXRECURSION:
                case tsqlParser.MIN:
                case tsqlParser.MODIFY:
                case tsqlParser.NAME:
                case tsqlParser.NEXT:
                case tsqlParser.NOCOUNT:
                case tsqlParser.NOEXPAND:
                case tsqlParser.NORECOMPUTE:
                case tsqlParser.NTILE:
                case tsqlParser.NUMBER:
                case tsqlParser.OFFSET:
                case tsqlParser.ONLINE:
                case tsqlParser.ONLY:
                case tsqlParser.OPTIMISTIC:
                case tsqlParser.OPTIMIZE:
                case tsqlParser.OUT:
                case tsqlParser.OUTPUT:
                case tsqlParser.OWNER:
                case tsqlParser.PARAMETERIZATION:
                case tsqlParser.PARTITION:
                case tsqlParser.PATH:
                case tsqlParser.PRECEDING:
                case tsqlParser.PRIOR:
                case tsqlParser.PRIVILEGES:
                case tsqlParser.RANGE:
                case tsqlParser.RANK:
                case tsqlParser.READONLY:
                case tsqlParser.READ_ONLY:
                case tsqlParser.RECOMPILE:
                case tsqlParser.RELATIVE:
                case tsqlParser.REMOTE:
                case tsqlParser.REPEATABLE:
                case tsqlParser.ROBUST:
                case tsqlParser.ROOT:
                case tsqlParser.ROW:
                case tsqlParser.ROWGUID:
                case tsqlParser.ROWS:
                case tsqlParser.ROW_NUMBER:
                case tsqlParser.SAMPLE:
                case tsqlParser.SCHEMABINDING:
                case tsqlParser.SCROLL:
                case tsqlParser.SCROLL_LOCKS:
                case tsqlParser.SELF:
                case tsqlParser.SERIALIZABLE:
                case tsqlParser.SIMPLE:
                case tsqlParser.SIZE:
                case tsqlParser.SNAPSHOT:
                case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
                case tsqlParser.STATIC:
                case tsqlParser.STATS_STREAM:
                case tsqlParser.STDEV:
                case tsqlParser.STDEVP:
                case tsqlParser.SUM:
                case tsqlParser.TEXTIMAGE_ON:
                case tsqlParser.THROW:
                case tsqlParser.TIES:
                case tsqlParser.TIME:
                case tsqlParser.TRY:
                case tsqlParser.TYPE:
                case tsqlParser.TYPE_WARNING:
                case tsqlParser.UNBOUNDED:
                case tsqlParser.UNCOMMITTED:
                case tsqlParser.UNKNOWN:
                case tsqlParser.USING:
                case tsqlParser.VAR:
                case tsqlParser.VARP:
                case tsqlParser.VIEWS:
                case tsqlParser.VIEW_METADATA:
                case tsqlParser.WORK:
                case tsqlParser.XML:
                case tsqlParser.XMLNAMESPACES:
                case tsqlParser.DOUBLE_QUOTE_ID:
                case tsqlParser.SQUARE_BRACKET_ID:
                case tsqlParser.ID:
                    this.state = 1584;
                    this.r_id();
                    break;
                case tsqlParser.LOCAL_ID:
                    this.state = 1585;
                    this.match(tsqlParser.LOCAL_ID);
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
                this.state = 1594;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,228,this._ctx);
                if(la_===1) {
                    this.state = 1588;
                    this.match(tsqlParser.WITH);
                    this.state = 1589;
                    this.match(tsqlParser.LR_BRACKET);
                    this.state = 1590;
                    this.match(tsqlParser.DELAYED_DURABILITY);
                    this.state = 1591;
                    this.match(tsqlParser.EQUAL);
                    this.state = 1592;
                    _la = this._input.LA(1);
                    if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
                    this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1593;
                    this.match(tsqlParser.RR_BRACKET);

                }

            }
            this.state = 1599;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,230,this._ctx);
            if(la_===1) {
                this.state = 1598;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1601;
            this.match(tsqlParser.COMMIT);
            this.state = 1603;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,231,this._ctx);
            if(la_===1) {
                this.state = 1602;
                this.match(tsqlParser.WORK);

            }
            this.state = 1606;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,232,this._ctx);
            if(la_===1) {
                this.state = 1605;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1608;
            this.match(tsqlParser.ROLLBACK);
            this.state = 1609;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TRAN || _la===tsqlParser.TRANSACTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1612;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,233,this._ctx);
            if(la_===1) {
                this.state = 1610;
                this.r_id();

            } else if(la_===2) {
                this.state = 1611;
                this.match(tsqlParser.LOCAL_ID);

            }
            this.state = 1615;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,234,this._ctx);
            if(la_===1) {
                this.state = 1614;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1617;
            this.match(tsqlParser.ROLLBACK);
            this.state = 1619;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,235,this._ctx);
            if(la_===1) {
                this.state = 1618;
                this.match(tsqlParser.WORK);

            }
            this.state = 1622;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,236,this._ctx);
            if(la_===1) {
                this.state = 1621;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 1624;
            this.match(tsqlParser.SAVE);
            this.state = 1625;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.TRAN || _la===tsqlParser.TRANSACTION)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1628;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,237,this._ctx);
            if(la_===1) {
                this.state = 1626;
                this.r_id();

            } else if(la_===2) {
                this.state = 1627;
                this.match(tsqlParser.LOCAL_ID);

            }
            this.state = 1631;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,238,this._ctx);
            if(la_===1) {
                this.state = 1630;
                this.match(tsqlParser.SEMI);

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Go_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_go_statement;
    this.count = null; // Token
    return this;
}

Go_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Go_statementContext.prototype.constructor = Go_statementContext;

Go_statementContext.prototype.GO = function() {
    return this.getToken(tsqlParser.GO, 0);
};

Go_statementContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Go_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterGo_statement(this);
	}
};

Go_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitGo_statement(this);
	}
};




tsqlParser.Go_statementContext = Go_statementContext;

tsqlParser.prototype.go_statement = function() {

    var localctx = new Go_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 136, tsqlParser.RULE_go_statement);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1635;
        this.match(tsqlParser.GO);
        this.state = 1637;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.DECIMAL) {
            this.state = 1636;
            localctx.count = this.match(tsqlParser.DECIMAL);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Use_statementContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_use_statement;
    this.database = null; // R_idContext
    return this;
}

Use_statementContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Use_statementContext.prototype.constructor = Use_statementContext;

Use_statementContext.prototype.USE = function() {
    return this.getToken(tsqlParser.USE, 0);
};

Use_statementContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Use_statementContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUse_statement(this);
	}
};

Use_statementContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUse_statement(this);
	}
};




tsqlParser.Use_statementContext = Use_statementContext;

tsqlParser.prototype.use_statement = function() {

    var localctx = new Use_statementContext(this, this._ctx, this.state);
    this.enterRule(localctx, 138, tsqlParser.RULE_use_statement);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1639;
        this.match(tsqlParser.USE);
        this.state = 1640;
        localctx.database = this.r_id();
        this.state = 1642;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,241,this._ctx);
        if(la_===1) {
            this.state = 1641;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Execute_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_execute_clause;
    this.clause = null; // Token
    return this;
}

Execute_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Execute_clauseContext.prototype.constructor = Execute_clauseContext;

Execute_clauseContext.prototype.EXECUTE = function() {
    return this.getToken(tsqlParser.EXECUTE, 0);
};

Execute_clauseContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Execute_clauseContext.prototype.CALLER = function() {
    return this.getToken(tsqlParser.CALLER, 0);
};

Execute_clauseContext.prototype.SELF = function() {
    return this.getToken(tsqlParser.SELF, 0);
};

Execute_clauseContext.prototype.OWNER = function() {
    return this.getToken(tsqlParser.OWNER, 0);
};

Execute_clauseContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Execute_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExecute_clause(this);
	}
};

Execute_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExecute_clause(this);
	}
};




tsqlParser.Execute_clauseContext = Execute_clauseContext;

tsqlParser.prototype.execute_clause = function() {

    var localctx = new Execute_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 140, tsqlParser.RULE_execute_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1644;
        this.match(tsqlParser.EXECUTE);
        this.state = 1645;
        this.match(tsqlParser.AS);
        this.state = 1646;
        localctx.clause = this._input.LT(1);
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.CALLER || _la===tsqlParser.OWNER || _la===tsqlParser.SELF || _la===tsqlParser.STRING)) {
            localctx.clause = this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Declare_localContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_declare_local;
    return this;
}

Declare_localContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declare_localContext.prototype.constructor = Declare_localContext;

Declare_localContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Declare_localContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};

Declare_localContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Declare_localContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Declare_localContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDeclare_local(this);
	}
};

Declare_localContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDeclare_local(this);
	}
};




tsqlParser.Declare_localContext = Declare_localContext;

tsqlParser.prototype.declare_local = function() {

    var localctx = new Declare_localContext(this, this._ctx, this.state);
    this.enterRule(localctx, 142, tsqlParser.RULE_declare_local);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1648;
        this.match(tsqlParser.LOCAL_ID);
        this.state = 1650;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.AS) {
            this.state = 1649;
            this.match(tsqlParser.AS);
        }

        this.state = 1652;
        this.data_type();
        this.state = 1655;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.EQUAL) {
            this.state = 1653;
            this.match(tsqlParser.EQUAL);
            this.state = 1654;
            this.expression(0);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_type_definitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_type_definition;
    return this;
}

Table_type_definitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_type_definitionContext.prototype.constructor = Table_type_definitionContext;

Table_type_definitionContext.prototype.TABLE = function() {
    return this.getToken(tsqlParser.TABLE, 0);
};

Table_type_definitionContext.prototype.column_def_table_constraints = function() {
    return this.getTypedRuleContext(Column_def_table_constraintsContext,0);
};

Table_type_definitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_type_definition(this);
	}
};

Table_type_definitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_type_definition(this);
	}
};




tsqlParser.Table_type_definitionContext = Table_type_definitionContext;

tsqlParser.prototype.table_type_definition = function() {

    var localctx = new Table_type_definitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 144, tsqlParser.RULE_table_type_definition);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1657;
        this.match(tsqlParser.TABLE);
        this.state = 1658;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 1659;
        this.column_def_table_constraints();
        this.state = 1660;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_def_table_constraintsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_def_table_constraints;
    return this;
}

Column_def_table_constraintsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_def_table_constraintsContext.prototype.constructor = Column_def_table_constraintsContext;

Column_def_table_constraintsContext.prototype.column_def_table_constraint = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Column_def_table_constraintContext);
    } else {
        return this.getTypedRuleContext(Column_def_table_constraintContext,i);
    }
};

Column_def_table_constraintsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_def_table_constraints(this);
	}
};

Column_def_table_constraintsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_def_table_constraints(this);
	}
};




tsqlParser.Column_def_table_constraintsContext = Column_def_table_constraintsContext;

tsqlParser.prototype.column_def_table_constraints = function() {

    var localctx = new Column_def_table_constraintsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 146, tsqlParser.RULE_column_def_table_constraints);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1662;
        this.column_def_table_constraint();
        this.state = 1669;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,245,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1664;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.COMMA) {
                    this.state = 1663;
                    this.match(tsqlParser.COMMA);
                }

                this.state = 1666;
                this.column_def_table_constraint(); 
            }
            this.state = 1671;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,245,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_def_table_constraintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_def_table_constraint;
    return this;
}

Column_def_table_constraintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_def_table_constraintContext.prototype.constructor = Column_def_table_constraintContext;

Column_def_table_constraintContext.prototype.column_definition = function() {
    return this.getTypedRuleContext(Column_definitionContext,0);
};

Column_def_table_constraintContext.prototype.table_constraint = function() {
    return this.getTypedRuleContext(Table_constraintContext,0);
};

Column_def_table_constraintContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_def_table_constraint(this);
	}
};

Column_def_table_constraintContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_def_table_constraint(this);
	}
};




tsqlParser.Column_def_table_constraintContext = Column_def_table_constraintContext;

tsqlParser.prototype.column_def_table_constraint = function() {

    var localctx = new Column_def_table_constraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 148, tsqlParser.RULE_column_def_table_constraint);
    try {
        this.state = 1674;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 1672;
            this.column_definition();
            break;
        case tsqlParser.CHECK:
        case tsqlParser.CONSTRAINT:
        case tsqlParser.PRIMARY:
        case tsqlParser.UNIQUE:
            this.enterOuterAlt(localctx, 2);
            this.state = 1673;
            this.table_constraint();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_definitionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_definition;
    this.constraint = null; // R_idContext
    this.seed = null; // Token
    this.increment = null; // Token
    return this;
}

Column_definitionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_definitionContext.prototype.constructor = Column_definitionContext;

Column_definitionContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Column_definitionContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};

Column_definitionContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Column_definitionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Column_definitionContext.prototype.COLLATE = function() {
    return this.getToken(tsqlParser.COLLATE, 0);
};

Column_definitionContext.prototype.null_notnull = function() {
    return this.getTypedRuleContext(Null_notnullContext,0);
};

Column_definitionContext.prototype.DEFAULT = function() {
    return this.getToken(tsqlParser.DEFAULT, 0);
};

Column_definitionContext.prototype.constant_expression = function() {
    return this.getTypedRuleContext(Constant_expressionContext,0);
};

Column_definitionContext.prototype.IDENTITY = function() {
    return this.getToken(tsqlParser.IDENTITY, 0);
};

Column_definitionContext.prototype.ROWGUIDCOL = function() {
    return this.getToken(tsqlParser.ROWGUIDCOL, 0);
};

Column_definitionContext.prototype.column_constraint = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Column_constraintContext);
    } else {
        return this.getTypedRuleContext(Column_constraintContext,i);
    }
};

Column_definitionContext.prototype.CONSTRAINT = function() {
    return this.getToken(tsqlParser.CONSTRAINT, 0);
};

Column_definitionContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Column_definitionContext.prototype.VALUES = function() {
    return this.getToken(tsqlParser.VALUES, 0);
};

Column_definitionContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Column_definitionContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Column_definitionContext.prototype.REPLICATION = function() {
    return this.getToken(tsqlParser.REPLICATION, 0);
};

Column_definitionContext.prototype.DECIMAL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.DECIMAL);
    } else {
        return this.getToken(tsqlParser.DECIMAL, i);
    }
};


Column_definitionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_definition(this);
	}
};

Column_definitionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_definition(this);
	}
};




tsqlParser.Column_definitionContext = Column_definitionContext;

tsqlParser.prototype.column_definition = function() {

    var localctx = new Column_definitionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 150, tsqlParser.RULE_column_definition);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1676;
        this.r_id();
        this.state = 1680;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.state = 1677;
            this.data_type();
            break;
        case tsqlParser.AS:
            this.state = 1678;
            this.match(tsqlParser.AS);
            this.state = 1679;
            this.expression(0);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 1684;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.COLLATE) {
            this.state = 1682;
            this.match(tsqlParser.COLLATE);
            this.state = 1683;
            this.r_id();
        }

        this.state = 1687;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,249,this._ctx);
        if(la_===1) {
            this.state = 1686;
            this.null_notnull();

        }
        this.state = 1712;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,254,this._ctx);
        if(la_===1) {
            this.state = 1691;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.CONSTRAINT) {
                this.state = 1689;
                this.match(tsqlParser.CONSTRAINT);
                this.state = 1690;
                localctx.constraint = this.r_id();
            }

            this.state = 1693;
            this.match(tsqlParser.DEFAULT);
            this.state = 1694;
            this.constant_expression();
            this.state = 1697;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,251,this._ctx);
            if(la_===1) {
                this.state = 1695;
                this.match(tsqlParser.WITH);
                this.state = 1696;
                this.match(tsqlParser.VALUES);

            }

        } else if(la_===2) {
            this.state = 1699;
            this.match(tsqlParser.IDENTITY);
            this.state = 1705;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,252,this._ctx);
            if(la_===1) {
                this.state = 1700;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 1701;
                localctx.seed = this.match(tsqlParser.DECIMAL);
                this.state = 1702;
                this.match(tsqlParser.COMMA);
                this.state = 1703;
                localctx.increment = this.match(tsqlParser.DECIMAL);
                this.state = 1704;
                this.match(tsqlParser.RR_BRACKET);

            }
            this.state = 1710;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,253,this._ctx);
            if(la_===1) {
                this.state = 1707;
                this.match(tsqlParser.NOT);
                this.state = 1708;
                this.match(tsqlParser.FOR);
                this.state = 1709;
                this.match(tsqlParser.REPLICATION);

            }

        }
        this.state = 1715;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ROWGUIDCOL) {
            this.state = 1714;
            this.match(tsqlParser.ROWGUIDCOL);
        }

        this.state = 1720;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,256,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 1717;
                this.column_constraint(); 
            }
            this.state = 1722;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,256,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_constraintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_constraint;
    return this;
}

Column_constraintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_constraintContext.prototype.constructor = Column_constraintContext;

Column_constraintContext.prototype.CHECK = function() {
    return this.getToken(tsqlParser.CHECK, 0);
};

Column_constraintContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

Column_constraintContext.prototype.CONSTRAINT = function() {
    return this.getToken(tsqlParser.CONSTRAINT, 0);
};

Column_constraintContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Column_constraintContext.prototype.null_notnull = function() {
    return this.getTypedRuleContext(Null_notnullContext,0);
};

Column_constraintContext.prototype.PRIMARY = function() {
    return this.getToken(tsqlParser.PRIMARY, 0);
};

Column_constraintContext.prototype.KEY = function() {
    return this.getToken(tsqlParser.KEY, 0);
};

Column_constraintContext.prototype.UNIQUE = function() {
    return this.getToken(tsqlParser.UNIQUE, 0);
};

Column_constraintContext.prototype.clustered = function() {
    return this.getTypedRuleContext(ClusteredContext,0);
};

Column_constraintContext.prototype.index_options = function() {
    return this.getTypedRuleContext(Index_optionsContext,0);
};

Column_constraintContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Column_constraintContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Column_constraintContext.prototype.REPLICATION = function() {
    return this.getToken(tsqlParser.REPLICATION, 0);
};

Column_constraintContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_constraint(this);
	}
};

Column_constraintContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_constraint(this);
	}
};




tsqlParser.Column_constraintContext = Column_constraintContext;

tsqlParser.prototype.column_constraint = function() {

    var localctx = new Column_constraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 152, tsqlParser.RULE_column_constraint);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1725;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.CONSTRAINT) {
            this.state = 1723;
            this.match(tsqlParser.CONSTRAINT);
            this.state = 1724;
            this.r_id();
        }

        this.state = 1728;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.NOT || _la===tsqlParser.NULL) {
            this.state = 1727;
            this.null_notnull();
        }

        this.state = 1751;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.PRIMARY:
        case tsqlParser.UNIQUE:
            this.state = 1733;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.PRIMARY:
                this.state = 1730;
                this.match(tsqlParser.PRIMARY);
                this.state = 1731;
                this.match(tsqlParser.KEY);
                break;
            case tsqlParser.UNIQUE:
                this.state = 1732;
                this.match(tsqlParser.UNIQUE);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1736;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.CLUSTERED || _la===tsqlParser.NONCLUSTERED) {
                this.state = 1735;
                this.clustered();
            }

            this.state = 1739;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,261,this._ctx);
            if(la_===1) {
                this.state = 1738;
                this.index_options();

            }
            break;
        case tsqlParser.CHECK:
            this.state = 1741;
            this.match(tsqlParser.CHECK);
            this.state = 1745;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.NOT) {
                this.state = 1742;
                this.match(tsqlParser.NOT);
                this.state = 1743;
                this.match(tsqlParser.FOR);
                this.state = 1744;
                this.match(tsqlParser.REPLICATION);
            }

            this.state = 1747;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1748;
            this.search_condition(0);
            this.state = 1749;
            this.match(tsqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_constraintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_constraint;
    return this;
}

Table_constraintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_constraintContext.prototype.constructor = Table_constraintContext;

Table_constraintContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Table_constraintContext.prototype.CHECK = function() {
    return this.getToken(tsqlParser.CHECK, 0);
};

Table_constraintContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

Table_constraintContext.prototype.CONSTRAINT = function() {
    return this.getToken(tsqlParser.CONSTRAINT, 0);
};

Table_constraintContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Table_constraintContext.prototype.PRIMARY = function() {
    return this.getToken(tsqlParser.PRIMARY, 0);
};

Table_constraintContext.prototype.KEY = function() {
    return this.getToken(tsqlParser.KEY, 0);
};

Table_constraintContext.prototype.UNIQUE = function() {
    return this.getToken(tsqlParser.UNIQUE, 0);
};

Table_constraintContext.prototype.clustered = function() {
    return this.getTypedRuleContext(ClusteredContext,0);
};

Table_constraintContext.prototype.index_options = function() {
    return this.getTypedRuleContext(Index_optionsContext,0);
};

Table_constraintContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Table_constraintContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Table_constraintContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Table_constraintContext.prototype.REPLICATION = function() {
    return this.getToken(tsqlParser.REPLICATION, 0);
};

Table_constraintContext.prototype.ASC = function() {
    return this.getToken(tsqlParser.ASC, 0);
};

Table_constraintContext.prototype.DESC = function() {
    return this.getToken(tsqlParser.DESC, 0);
};

Table_constraintContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_constraint(this);
	}
};

Table_constraintContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_constraint(this);
	}
};




tsqlParser.Table_constraintContext = Table_constraintContext;

tsqlParser.prototype.table_constraint = function() {

    var localctx = new Table_constraintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 154, tsqlParser.RULE_table_constraint);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1755;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.CONSTRAINT) {
            this.state = 1753;
            this.match(tsqlParser.CONSTRAINT);
            this.state = 1754;
            this.r_id();
        }

        this.state = 1788;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.PRIMARY:
        case tsqlParser.UNIQUE:
            this.state = 1760;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.PRIMARY:
                this.state = 1757;
                this.match(tsqlParser.PRIMARY);
                this.state = 1758;
                this.match(tsqlParser.KEY);
                break;
            case tsqlParser.UNIQUE:
                this.state = 1759;
                this.match(tsqlParser.UNIQUE);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1763;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.CLUSTERED || _la===tsqlParser.NONCLUSTERED) {
                this.state = 1762;
                this.clustered();
            }

            this.state = 1765;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1766;
            this.column_name_list();
            this.state = 1768;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ASC || _la===tsqlParser.DESC) {
                this.state = 1767;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.ASC || _la===tsqlParser.DESC)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 1770;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 1772;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,268,this._ctx);
            if(la_===1) {
                this.state = 1771;
                this.index_options();

            }
            this.state = 1776;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ON) {
                this.state = 1774;
                this.match(tsqlParser.ON);
                this.state = 1775;
                this.r_id();
            }

            break;
        case tsqlParser.CHECK:
            this.state = 1778;
            this.match(tsqlParser.CHECK);
            this.state = 1782;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.NOT) {
                this.state = 1779;
                this.match(tsqlParser.NOT);
                this.state = 1780;
                this.match(tsqlParser.FOR);
                this.state = 1781;
                this.match(tsqlParser.REPLICATION);
            }

            this.state = 1784;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1785;
            this.search_condition(0);
            this.state = 1786;
            this.match(tsqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Index_optionsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_index_options;
    return this;
}

Index_optionsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Index_optionsContext.prototype.constructor = Index_optionsContext;

Index_optionsContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Index_optionsContext.prototype.index_option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Index_optionContext);
    } else {
        return this.getTypedRuleContext(Index_optionContext,i);
    }
};

Index_optionsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterIndex_options(this);
	}
};

Index_optionsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitIndex_options(this);
	}
};




tsqlParser.Index_optionsContext = Index_optionsContext;

tsqlParser.prototype.index_options = function() {

    var localctx = new Index_optionsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 156, tsqlParser.RULE_index_options);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1790;
        this.match(tsqlParser.WITH);
        this.state = 1791;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 1792;
        this.index_option();
        this.state = 1797;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 1793;
            this.match(tsqlParser.COMMA);
            this.state = 1794;
            this.index_option();
            this.state = 1799;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 1800;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Index_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_index_option;
    return this;
}

Index_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Index_optionContext.prototype.constructor = Index_optionContext;

Index_optionContext.prototype.simple_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Simple_idContext);
    } else {
        return this.getTypedRuleContext(Simple_idContext,i);
    }
};

Index_optionContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Index_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Index_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterIndex_option(this);
	}
};

Index_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitIndex_option(this);
	}
};




tsqlParser.Index_optionContext = Index_optionContext;

tsqlParser.prototype.index_option = function() {

    var localctx = new Index_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 158, tsqlParser.RULE_index_option);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1802;
        this.simple_id();
        this.state = 1803;
        this.match(tsqlParser.EQUAL);
        this.state = 1807;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.ID:
            this.state = 1804;
            this.simple_id();
            break;
        case tsqlParser.OFF:
        case tsqlParser.ON:
            this.state = 1805;
            this.on_off();
            break;
        case tsqlParser.DECIMAL:
            this.state = 1806;
            this.match(tsqlParser.DECIMAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Declare_cursorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_declare_cursor;
    return this;
}

Declare_cursorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declare_cursorContext.prototype.constructor = Declare_cursorContext;

Declare_cursorContext.prototype.DECLARE = function() {
    return this.getToken(tsqlParser.DECLARE, 0);
};

Declare_cursorContext.prototype.cursor_name = function() {
    return this.getTypedRuleContext(Cursor_nameContext,0);
};

Declare_cursorContext.prototype.CURSOR = function() {
    return this.getToken(tsqlParser.CURSOR, 0);
};

Declare_cursorContext.prototype.FOR = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.FOR);
    } else {
        return this.getToken(tsqlParser.FOR, i);
    }
};


Declare_cursorContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

Declare_cursorContext.prototype.declare_set_cursor_common = function() {
    return this.getTypedRuleContext(Declare_set_cursor_commonContext,0);
};

Declare_cursorContext.prototype.INSENSITIVE = function() {
    return this.getToken(tsqlParser.INSENSITIVE, 0);
};

Declare_cursorContext.prototype.SCROLL = function() {
    return this.getToken(tsqlParser.SCROLL, 0);
};

Declare_cursorContext.prototype.READ = function() {
    return this.getToken(tsqlParser.READ, 0);
};

Declare_cursorContext.prototype.ONLY = function() {
    return this.getToken(tsqlParser.ONLY, 0);
};

Declare_cursorContext.prototype.UPDATE = function() {
    return this.getToken(tsqlParser.UPDATE, 0);
};

Declare_cursorContext.prototype.OF = function() {
    return this.getToken(tsqlParser.OF, 0);
};

Declare_cursorContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Declare_cursorContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDeclare_cursor(this);
	}
};

Declare_cursorContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDeclare_cursor(this);
	}
};




tsqlParser.Declare_cursorContext = Declare_cursorContext;

tsqlParser.prototype.declare_cursor = function() {

    var localctx = new Declare_cursorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 160, tsqlParser.RULE_declare_cursor);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1809;
        this.match(tsqlParser.DECLARE);
        this.state = 1810;
        this.cursor_name();
        this.state = 1842;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,281,this._ctx);
        switch(la_) {
        case 1:
            this.state = 1811;
            this.match(tsqlParser.CURSOR);
            this.state = 1821;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,276,this._ctx);
            if(la_===1) {
                this.state = 1812;
                this.declare_set_cursor_common();
                this.state = 1819;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.FOR) {
                    this.state = 1813;
                    this.match(tsqlParser.FOR);
                    this.state = 1814;
                    this.match(tsqlParser.UPDATE);
                    this.state = 1817;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                    if(_la===tsqlParser.OF) {
                        this.state = 1815;
                        this.match(tsqlParser.OF);
                        this.state = 1816;
                        this.column_name_list();
                    }

                }


            }
            break;

        case 2:
            this.state = 1824;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.INSENSITIVE) {
                this.state = 1823;
                this.match(tsqlParser.INSENSITIVE);
            }

            this.state = 1827;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.SCROLL) {
                this.state = 1826;
                this.match(tsqlParser.SCROLL);
            }

            this.state = 1829;
            this.match(tsqlParser.CURSOR);
            this.state = 1830;
            this.match(tsqlParser.FOR);
            this.state = 1831;
            this.select_statement();
            this.state = 1840;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FOR) {
                this.state = 1832;
                this.match(tsqlParser.FOR);
                this.state = 1838;
                this._errHandler.sync(this);
                switch(this._input.LA(1)) {
                case tsqlParser.READ:
                    this.state = 1833;
                    this.match(tsqlParser.READ);
                    this.state = 1834;
                    this.match(tsqlParser.ONLY);
                    break;
                case tsqlParser.UPDATE:
                    this.state = 1835;
                    this.match(tsqlParser.UPDATE);
                    break;
                case tsqlParser.OF:
                    this.state = 1836;
                    this.match(tsqlParser.OF);
                    this.state = 1837;
                    this.column_name_list();
                    break;
                default:
                    throw new antlr4.error.NoViableAltException(this);
                }
            }

            break;

        }
        this.state = 1845;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,282,this._ctx);
        if(la_===1) {
            this.state = 1844;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Declare_set_cursor_commonContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_declare_set_cursor_common;
    return this;
}

Declare_set_cursor_commonContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Declare_set_cursor_commonContext.prototype.constructor = Declare_set_cursor_commonContext;

Declare_set_cursor_commonContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

Declare_set_cursor_commonContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

Declare_set_cursor_commonContext.prototype.TYPE_WARNING = function() {
    return this.getToken(tsqlParser.TYPE_WARNING, 0);
};

Declare_set_cursor_commonContext.prototype.LOCAL = function() {
    return this.getToken(tsqlParser.LOCAL, 0);
};

Declare_set_cursor_commonContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Declare_set_cursor_commonContext.prototype.FORWARD_ONLY = function() {
    return this.getToken(tsqlParser.FORWARD_ONLY, 0);
};

Declare_set_cursor_commonContext.prototype.SCROLL = function() {
    return this.getToken(tsqlParser.SCROLL, 0);
};

Declare_set_cursor_commonContext.prototype.STATIC = function() {
    return this.getToken(tsqlParser.STATIC, 0);
};

Declare_set_cursor_commonContext.prototype.KEYSET = function() {
    return this.getToken(tsqlParser.KEYSET, 0);
};

Declare_set_cursor_commonContext.prototype.DYNAMIC = function() {
    return this.getToken(tsqlParser.DYNAMIC, 0);
};

Declare_set_cursor_commonContext.prototype.FAST_FORWARD = function() {
    return this.getToken(tsqlParser.FAST_FORWARD, 0);
};

Declare_set_cursor_commonContext.prototype.READ_ONLY = function() {
    return this.getToken(tsqlParser.READ_ONLY, 0);
};

Declare_set_cursor_commonContext.prototype.SCROLL_LOCKS = function() {
    return this.getToken(tsqlParser.SCROLL_LOCKS, 0);
};

Declare_set_cursor_commonContext.prototype.OPTIMISTIC = function() {
    return this.getToken(tsqlParser.OPTIMISTIC, 0);
};

Declare_set_cursor_commonContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDeclare_set_cursor_common(this);
	}
};

Declare_set_cursor_commonContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDeclare_set_cursor_common(this);
	}
};




tsqlParser.Declare_set_cursor_commonContext = Declare_set_cursor_commonContext;

tsqlParser.prototype.declare_set_cursor_common = function() {

    var localctx = new Declare_set_cursor_commonContext(this, this._ctx, this.state);
    this.enterRule(localctx, 162, tsqlParser.RULE_declare_set_cursor_common);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1848;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.GLOBAL || _la===tsqlParser.LOCAL) {
            this.state = 1847;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.GLOBAL || _la===tsqlParser.LOCAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 1851;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FORWARD_ONLY || _la===tsqlParser.SCROLL) {
            this.state = 1850;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.FORWARD_ONLY || _la===tsqlParser.SCROLL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 1854;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.DYNAMIC || _la===tsqlParser.FAST_FORWARD || _la===tsqlParser.KEYSET || _la===tsqlParser.STATIC) {
            this.state = 1853;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.DYNAMIC || _la===tsqlParser.FAST_FORWARD || _la===tsqlParser.KEYSET || _la===tsqlParser.STATIC)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 1857;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.OPTIMISTIC || _la===tsqlParser.READ_ONLY || _la===tsqlParser.SCROLL_LOCKS) {
            this.state = 1856;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OPTIMISTIC || _la===tsqlParser.READ_ONLY || _la===tsqlParser.SCROLL_LOCKS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 1860;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.TYPE_WARNING) {
            this.state = 1859;
            this.match(tsqlParser.TYPE_WARNING);
        }

        this.state = 1862;
        this.match(tsqlParser.FOR);
        this.state = 1863;
        this.select_statement();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Fetch_cursorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_fetch_cursor;
    return this;
}

Fetch_cursorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Fetch_cursorContext.prototype.constructor = Fetch_cursorContext;

Fetch_cursorContext.prototype.FETCH = function() {
    return this.getToken(tsqlParser.FETCH, 0);
};

Fetch_cursorContext.prototype.cursor_name = function() {
    return this.getTypedRuleContext(Cursor_nameContext,0);
};

Fetch_cursorContext.prototype.FROM = function() {
    return this.getToken(tsqlParser.FROM, 0);
};

Fetch_cursorContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Fetch_cursorContext.prototype.INTO = function() {
    return this.getToken(tsqlParser.INTO, 0);
};

Fetch_cursorContext.prototype.LOCAL_ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.LOCAL_ID);
    } else {
        return this.getToken(tsqlParser.LOCAL_ID, i);
    }
};


Fetch_cursorContext.prototype.NEXT = function() {
    return this.getToken(tsqlParser.NEXT, 0);
};

Fetch_cursorContext.prototype.PRIOR = function() {
    return this.getToken(tsqlParser.PRIOR, 0);
};

Fetch_cursorContext.prototype.FIRST = function() {
    return this.getToken(tsqlParser.FIRST, 0);
};

Fetch_cursorContext.prototype.LAST = function() {
    return this.getToken(tsqlParser.LAST, 0);
};

Fetch_cursorContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Fetch_cursorContext.prototype.ABSOLUTE = function() {
    return this.getToken(tsqlParser.ABSOLUTE, 0);
};

Fetch_cursorContext.prototype.RELATIVE = function() {
    return this.getToken(tsqlParser.RELATIVE, 0);
};

Fetch_cursorContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFetch_cursor(this);
	}
};

Fetch_cursorContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFetch_cursor(this);
	}
};




tsqlParser.Fetch_cursorContext = Fetch_cursorContext;

tsqlParser.prototype.fetch_cursor = function() {

    var localctx = new Fetch_cursorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 164, tsqlParser.RULE_fetch_cursor);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1865;
        this.match(tsqlParser.FETCH);
        this.state = 1875;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,289,this._ctx);
        if(la_===1) {
            this.state = 1872;
            this._errHandler.sync(this);
            switch (this._input.LA(1)) {
            case tsqlParser.NEXT:
            	this.state = 1866;
            	this.match(tsqlParser.NEXT);
            	break;
            case tsqlParser.PRIOR:
            	this.state = 1867;
            	this.match(tsqlParser.PRIOR);
            	break;
            case tsqlParser.FIRST:
            	this.state = 1868;
            	this.match(tsqlParser.FIRST);
            	break;
            case tsqlParser.LAST:
            	this.state = 1869;
            	this.match(tsqlParser.LAST);
            	break;
            case tsqlParser.ABSOLUTE:
            case tsqlParser.RELATIVE:
            	this.state = 1870;
            	_la = this._input.LA(1);
            	if(!(_la===tsqlParser.ABSOLUTE || _la===tsqlParser.RELATIVE)) {
            	this._errHandler.recoverInline(this);
            	}
            	else {
            		this._errHandler.reportMatch(this);
            	    this.consume();
            	}
            	this.state = 1871;
            	this.expression(0);
            	break;
            case tsqlParser.FROM:
            	break;
            default:
            	break;
            }
            this.state = 1874;
            this.match(tsqlParser.FROM);

        }
        this.state = 1878;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,290,this._ctx);
        if(la_===1) {
            this.state = 1877;
            this.match(tsqlParser.GLOBAL);

        }
        this.state = 1880;
        this.cursor_name();
        this.state = 1890;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.INTO) {
            this.state = 1881;
            this.match(tsqlParser.INTO);
            this.state = 1882;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 1887;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 1883;
                this.match(tsqlParser.COMMA);
                this.state = 1884;
                this.match(tsqlParser.LOCAL_ID);
                this.state = 1889;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
        }

        this.state = 1893;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,293,this._ctx);
        if(la_===1) {
            this.state = 1892;
            this.match(tsqlParser.SEMI);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Set_specialContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_set_special;
    return this;
}

Set_specialContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Set_specialContext.prototype.constructor = Set_specialContext;

Set_specialContext.prototype.SET = function() {
    return this.getToken(tsqlParser.SET, 0);
};

Set_specialContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Set_specialContext.prototype.constant_LOCAL_ID = function() {
    return this.getTypedRuleContext(Constant_LOCAL_IDContext,0);
};

Set_specialContext.prototype.on_off = function() {
    return this.getTypedRuleContext(On_offContext,0);
};

Set_specialContext.prototype.TRANSACTION = function() {
    return this.getToken(tsqlParser.TRANSACTION, 0);
};

Set_specialContext.prototype.ISOLATION = function() {
    return this.getToken(tsqlParser.ISOLATION, 0);
};

Set_specialContext.prototype.LEVEL = function() {
    return this.getToken(tsqlParser.LEVEL, 0);
};

Set_specialContext.prototype.READ = function() {
    return this.getToken(tsqlParser.READ, 0);
};

Set_specialContext.prototype.UNCOMMITTED = function() {
    return this.getToken(tsqlParser.UNCOMMITTED, 0);
};

Set_specialContext.prototype.COMMITTED = function() {
    return this.getToken(tsqlParser.COMMITTED, 0);
};

Set_specialContext.prototype.REPEATABLE = function() {
    return this.getToken(tsqlParser.REPEATABLE, 0);
};

Set_specialContext.prototype.SNAPSHOT = function() {
    return this.getToken(tsqlParser.SNAPSHOT, 0);
};

Set_specialContext.prototype.SERIALIZABLE = function() {
    return this.getToken(tsqlParser.SERIALIZABLE, 0);
};

Set_specialContext.prototype.IDENTITY_INSERT = function() {
    return this.getToken(tsqlParser.IDENTITY_INSERT, 0);
};

Set_specialContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Set_specialContext.prototype.ANSI_NULLS = function() {
    return this.getToken(tsqlParser.ANSI_NULLS, 0);
};

Set_specialContext.prototype.QUOTED_IDENTIFIER = function() {
    return this.getToken(tsqlParser.QUOTED_IDENTIFIER, 0);
};

Set_specialContext.prototype.ANSI_PADDING = function() {
    return this.getToken(tsqlParser.ANSI_PADDING, 0);
};

Set_specialContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSet_special(this);
	}
};

Set_specialContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSet_special(this);
	}
};




tsqlParser.Set_specialContext = Set_specialContext;

tsqlParser.prototype.set_special = function() {

    var localctx = new Set_specialContext(this, this._ctx, this.state);
    this.enterRule(localctx, 166, tsqlParser.RULE_set_special);
    try {
        this.state = 1938;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,299,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 1895;
            this.match(tsqlParser.SET);
            this.state = 1896;
            this.r_id();
            this.state = 1900;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 1897;
                this.r_id();
                break;
            case tsqlParser.LOCAL_ID:
            case tsqlParser.DECIMAL:
            case tsqlParser.STRING:
            case tsqlParser.BINARY:
            case tsqlParser.FLOAT:
            case tsqlParser.REAL:
            case tsqlParser.DOLLAR:
            case tsqlParser.PLUS:
            case tsqlParser.MINUS:
                this.state = 1898;
                this.constant_LOCAL_ID();
                break;
            case tsqlParser.OFF:
            case tsqlParser.ON:
                this.state = 1899;
                this.on_off();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 1903;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,295,this._ctx);
            if(la_===1) {
                this.state = 1902;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 1905;
            this.match(tsqlParser.SET);
            this.state = 1906;
            this.match(tsqlParser.TRANSACTION);
            this.state = 1907;
            this.match(tsqlParser.ISOLATION);
            this.state = 1908;
            this.match(tsqlParser.LEVEL);
            this.state = 1917;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,296,this._ctx);
            switch(la_) {
            case 1:
                this.state = 1909;
                this.match(tsqlParser.READ);
                this.state = 1910;
                this.match(tsqlParser.UNCOMMITTED);
                break;

            case 2:
                this.state = 1911;
                this.match(tsqlParser.READ);
                this.state = 1912;
                this.match(tsqlParser.COMMITTED);
                break;

            case 3:
                this.state = 1913;
                this.match(tsqlParser.REPEATABLE);
                this.state = 1914;
                this.match(tsqlParser.READ);
                break;

            case 4:
                this.state = 1915;
                this.match(tsqlParser.SNAPSHOT);
                break;

            case 5:
                this.state = 1916;
                this.match(tsqlParser.SERIALIZABLE);
                break;

            }
            this.state = 1920;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,297,this._ctx);
            if(la_===1) {
                this.state = 1919;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 1922;
            this.match(tsqlParser.SET);
            this.state = 1923;
            this.match(tsqlParser.IDENTITY_INSERT);
            this.state = 1924;
            this.table_name();
            this.state = 1925;
            this.on_off();
            this.state = 1927;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,298,this._ctx);
            if(la_===1) {
                this.state = 1926;
                this.match(tsqlParser.SEMI);

            }
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 1929;
            this.match(tsqlParser.SET);
            this.state = 1930;
            this.match(tsqlParser.ANSI_NULLS);
            this.state = 1931;
            this.on_off();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 1932;
            this.match(tsqlParser.SET);
            this.state = 1933;
            this.match(tsqlParser.QUOTED_IDENTIFIER);
            this.state = 1934;
            this.on_off();
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 1935;
            this.match(tsqlParser.SET);
            this.state = 1936;
            this.match(tsqlParser.ANSI_PADDING);
            this.state = 1937;
            this.on_off();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Constant_LOCAL_IDContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_constant_LOCAL_ID;
    return this;
}

Constant_LOCAL_IDContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Constant_LOCAL_IDContext.prototype.constructor = Constant_LOCAL_IDContext;

Constant_LOCAL_IDContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};

Constant_LOCAL_IDContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Constant_LOCAL_IDContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterConstant_LOCAL_ID(this);
	}
};

Constant_LOCAL_IDContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitConstant_LOCAL_ID(this);
	}
};




tsqlParser.Constant_LOCAL_IDContext = Constant_LOCAL_IDContext;

tsqlParser.prototype.constant_LOCAL_ID = function() {

    var localctx = new Constant_LOCAL_IDContext(this, this._ctx, this.state);
    this.enterRule(localctx, 168, tsqlParser.RULE_constant_LOCAL_ID);
    try {
        this.state = 1942;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.DECIMAL:
        case tsqlParser.STRING:
        case tsqlParser.BINARY:
        case tsqlParser.FLOAT:
        case tsqlParser.REAL:
        case tsqlParser.DOLLAR:
        case tsqlParser.PLUS:
        case tsqlParser.MINUS:
            this.enterOuterAlt(localctx, 1);
            this.state = 1940;
            this.constant();
            break;
        case tsqlParser.LOCAL_ID:
            this.enterOuterAlt(localctx, 2);
            this.state = 1941;
            this.match(tsqlParser.LOCAL_ID);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function ExpressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_expression;
    return this;
}

ExpressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ExpressionContext.prototype.constructor = ExpressionContext;


 
ExpressionContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};

function Primitive_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Primitive_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Primitive_expressionContext.prototype.constructor = Primitive_expressionContext;

tsqlParser.Primitive_expressionContext = Primitive_expressionContext;

Primitive_expressionContext.prototype.DEFAULT = function() {
    return this.getToken(tsqlParser.DEFAULT, 0);
};

Primitive_expressionContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Primitive_expressionContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Primitive_expressionContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};
Primitive_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterPrimitive_expression(this);
	}
};

Primitive_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitPrimitive_expression(this);
	}
};


function Subquery_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Subquery_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Subquery_expressionContext.prototype.constructor = Subquery_expressionContext;

tsqlParser.Subquery_expressionContext = Subquery_expressionContext;

Subquery_expressionContext.prototype.subquery = function() {
    return this.getTypedRuleContext(SubqueryContext,0);
};
Subquery_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSubquery_expression(this);
	}
};

Subquery_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSubquery_expression(this);
	}
};


function Over_clause_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Over_clause_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Over_clause_expressionContext.prototype.constructor = Over_clause_expressionContext;

tsqlParser.Over_clause_expressionContext = Over_clause_expressionContext;

Over_clause_expressionContext.prototype.over_clause = function() {
    return this.getTypedRuleContext(Over_clauseContext,0);
};
Over_clause_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOver_clause_expression(this);
	}
};

Over_clause_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOver_clause_expression(this);
	}
};


function Case_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.caseExpr = null; // ExpressionContext;
    this.elseExpr = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Case_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Case_expressionContext.prototype.constructor = Case_expressionContext;

tsqlParser.Case_expressionContext = Case_expressionContext;

Case_expressionContext.prototype.CASE = function() {
    return this.getToken(tsqlParser.CASE, 0);
};

Case_expressionContext.prototype.END = function() {
    return this.getToken(tsqlParser.END, 0);
};

Case_expressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Case_expressionContext.prototype.switch_section = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Switch_sectionContext);
    } else {
        return this.getTypedRuleContext(Switch_sectionContext,i);
    }
};

Case_expressionContext.prototype.ELSE = function() {
    return this.getToken(tsqlParser.ELSE, 0);
};

Case_expressionContext.prototype.switch_search_condition_section = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Switch_search_condition_sectionContext);
    } else {
        return this.getTypedRuleContext(Switch_search_condition_sectionContext,i);
    }
};
Case_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCase_expression(this);
	}
};

Case_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCase_expression(this);
	}
};


function Bracket_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Bracket_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Bracket_expressionContext.prototype.constructor = Bracket_expressionContext;

tsqlParser.Bracket_expressionContext = Bracket_expressionContext;

Bracket_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
Bracket_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBracket_expression(this);
	}
};

Bracket_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBracket_expression(this);
	}
};


function Binary_operator_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.op = null; // Token;
    this.right = null; // ExpressionContext;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Binary_operator_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Binary_operator_expressionContext.prototype.constructor = Binary_operator_expressionContext;

tsqlParser.Binary_operator_expressionContext = Binary_operator_expressionContext;

Binary_operator_expressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Binary_operator_expressionContext.prototype.comparison_operator = function() {
    return this.getTypedRuleContext(Comparison_operatorContext,0);
};
Binary_operator_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBinary_operator_expression(this);
	}
};

Binary_operator_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBinary_operator_expression(this);
	}
};


function Unary_operator_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    this.op = null; // Token;
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Unary_operator_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Unary_operator_expressionContext.prototype.constructor = Unary_operator_expressionContext;

tsqlParser.Unary_operator_expressionContext = Unary_operator_expressionContext;

Unary_operator_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};
Unary_operator_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUnary_operator_expression(this);
	}
};

Unary_operator_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUnary_operator_expression(this);
	}
};


function Column_ref_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Column_ref_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Column_ref_expressionContext.prototype.constructor = Column_ref_expressionContext;

tsqlParser.Column_ref_expressionContext = Column_ref_expressionContext;

Column_ref_expressionContext.prototype.full_column_name = function() {
    return this.getTypedRuleContext(Full_column_nameContext,0);
};
Column_ref_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_ref_expression(this);
	}
};

Column_ref_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_ref_expression(this);
	}
};


function Function_call_expressionContext(parser, ctx) {
	ExpressionContext.call(this, parser);
    ExpressionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Function_call_expressionContext.prototype = Object.create(ExpressionContext.prototype);
Function_call_expressionContext.prototype.constructor = Function_call_expressionContext;

tsqlParser.Function_call_expressionContext = Function_call_expressionContext;

Function_call_expressionContext.prototype.function_call = function() {
    return this.getTypedRuleContext(Function_callContext,0);
};

Function_call_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Function_call_expressionContext.prototype.COLLATE = function() {
    return this.getToken(tsqlParser.COLLATE, 0);
};

Function_call_expressionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};
Function_call_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFunction_call_expression(this);
	}
};

Function_call_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFunction_call_expression(this);
	}
};



tsqlParser.prototype.expression = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new ExpressionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 170;
    this.enterRecursionRule(localctx, 170, tsqlParser.RULE_expression, _p);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 1989;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,305,this._ctx);
        switch(la_) {
        case 1:
            localctx = new Primitive_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;

            this.state = 1945;
            this.match(tsqlParser.DEFAULT);
            break;

        case 2:
            localctx = new Primitive_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1946;
            this.match(tsqlParser.NULL);
            break;

        case 3:
            localctx = new Primitive_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1947;
            this.match(tsqlParser.LOCAL_ID);
            break;

        case 4:
            localctx = new Primitive_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1948;
            this.constant();
            break;

        case 5:
            localctx = new Function_call_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1949;
            this.function_call();
            break;

        case 6:
            localctx = new Case_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1950;
            this.match(tsqlParser.CASE);
            this.state = 1951;
            localctx.caseExpr = this.expression(0);
            this.state = 1953; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 1952;
                this.switch_section();
                this.state = 1955; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===tsqlParser.WHEN);
            this.state = 1959;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ELSE) {
                this.state = 1957;
                this.match(tsqlParser.ELSE);
                this.state = 1958;
                localctx.elseExpr = this.expression(0);
            }

            this.state = 1961;
            this.match(tsqlParser.END);
            break;

        case 7:
            localctx = new Case_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1963;
            this.match(tsqlParser.CASE);
            this.state = 1965; 
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            do {
                this.state = 1964;
                this.switch_search_condition_section();
                this.state = 1967; 
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            } while(_la===tsqlParser.WHEN);
            this.state = 1971;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ELSE) {
                this.state = 1969;
                this.match(tsqlParser.ELSE);
                this.state = 1970;
                localctx.elseExpr = this.expression(0);
            }

            this.state = 1973;
            this.match(tsqlParser.END);
            break;

        case 8:
            localctx = new Column_ref_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1975;
            this.full_column_name();
            break;

        case 9:
            localctx = new Bracket_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1976;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1977;
            this.expression(0);
            this.state = 1978;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 10:
            localctx = new Subquery_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1980;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 1981;
            this.subquery();
            this.state = 1982;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 11:
            localctx = new Unary_operator_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1984;
            localctx.op = this.match(tsqlParser.BIT_NOT);
            this.state = 1985;
            this.expression(6);
            break;

        case 12:
            localctx = new Unary_operator_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1986;
            localctx.op = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.PLUS || _la===tsqlParser.MINUS)) {
                localctx.op = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 1987;
            this.expression(4);
            break;

        case 13:
            localctx = new Over_clause_expressionContext(this, localctx);
            this._ctx = localctx;
            _prevctx = localctx;
            this.state = 1988;
            this.over_clause();
            break;

        }
        this._ctx.stop = this._input.LT(-1);
        this.state = 2006;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,307,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                this.state = 2004;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,306,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new Binary_operator_expressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_expression);
                    this.state = 1991;
                    if (!( this.precpred(this._ctx, 5))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 5)");
                    }
                    this.state = 1992;
                    localctx.op = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(((((_la - 431)) & ~0x1f) == 0 && ((1 << (_la - 431)) & ((1 << (tsqlParser.STAR - 431)) | (1 << (tsqlParser.DIVIDE - 431)) | (1 << (tsqlParser.MODULE - 431)))) !== 0))) {
                        localctx.op = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1993;
                    localctx.right = this.expression(6);
                    break;

                case 2:
                    localctx = new Binary_operator_expressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_expression);
                    this.state = 1994;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 1995;
                    localctx.op = this._input.LT(1);
                    _la = this._input.LA(1);
                    if(!(((((_la - 434)) & ~0x1f) == 0 && ((1 << (_la - 434)) & ((1 << (tsqlParser.PLUS - 434)) | (1 << (tsqlParser.MINUS - 434)) | (1 << (tsqlParser.BIT_OR - 434)) | (1 << (tsqlParser.BIT_AND - 434)) | (1 << (tsqlParser.BIT_XOR - 434)))) !== 0))) {
                        localctx.op = this._errHandler.recoverInline(this);
                    }
                    else {
                    	this._errHandler.reportMatch(this);
                        this.consume();
                    }
                    this.state = 1996;
                    localctx.right = this.expression(4);
                    break;

                case 3:
                    localctx = new Binary_operator_expressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_expression);
                    this.state = 1997;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 1998;
                    this.comparison_operator();
                    this.state = 1999;
                    localctx.right = this.expression(3);
                    break;

                case 4:
                    localctx = new Function_call_expressionContext(this, new ExpressionContext(this, _parentctx, _parentState));
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_expression);
                    this.state = 2001;
                    if (!( this.precpred(this._ctx, 12))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 12)");
                    }
                    this.state = 2002;
                    this.match(tsqlParser.COLLATE);
                    this.state = 2003;
                    this.r_id();
                    break;

                } 
            }
            this.state = 2008;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,307,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};

function Constant_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_constant_expression;
    return this;
}

Constant_expressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Constant_expressionContext.prototype.constructor = Constant_expressionContext;

Constant_expressionContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Constant_expressionContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};

Constant_expressionContext.prototype.function_call = function() {
    return this.getTypedRuleContext(Function_callContext,0);
};

Constant_expressionContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Constant_expressionContext.prototype.constant_expression = function() {
    return this.getTypedRuleContext(Constant_expressionContext,0);
};

Constant_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterConstant_expression(this);
	}
};

Constant_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitConstant_expression(this);
	}
};




tsqlParser.Constant_expressionContext = Constant_expressionContext;

tsqlParser.prototype.constant_expression = function() {

    var localctx = new Constant_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 172, tsqlParser.RULE_constant_expression);
    try {
        this.state = 2017;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.NULL:
            this.enterOuterAlt(localctx, 1);
            this.state = 2009;
            this.match(tsqlParser.NULL);
            break;
        case tsqlParser.DECIMAL:
        case tsqlParser.STRING:
        case tsqlParser.BINARY:
        case tsqlParser.FLOAT:
        case tsqlParser.REAL:
        case tsqlParser.DOLLAR:
        case tsqlParser.PLUS:
        case tsqlParser.MINUS:
            this.enterOuterAlt(localctx, 2);
            this.state = 2010;
            this.constant();
            break;
        case tsqlParser.COALESCE:
        case tsqlParser.CONVERT:
        case tsqlParser.CURRENT_TIMESTAMP:
        case tsqlParser.CURRENT_USER:
        case tsqlParser.FORCESEEK:
        case tsqlParser.IDENTITY:
        case tsqlParser.LEFT:
        case tsqlParser.NULLIF:
        case tsqlParser.RIGHT:
        case tsqlParser.SESSION_USER:
        case tsqlParser.SYSTEM_USER:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.BINARY_CHECKSUM:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DATEADD:
        case tsqlParser.DATEDIFF:
        case tsqlParser.DATENAME:
        case tsqlParser.DATEPART:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MIN_ACTIVE_ROWVERSION:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 3);
            this.state = 2011;
            this.function_call();
            break;
        case tsqlParser.LOCAL_ID:
            this.enterOuterAlt(localctx, 4);
            this.state = 2012;
            this.match(tsqlParser.LOCAL_ID);
            break;
        case tsqlParser.LR_BRACKET:
            this.enterOuterAlt(localctx, 5);
            this.state = 2013;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2014;
            this.constant_expression();
            this.state = 2015;
            this.match(tsqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function SubqueryContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_subquery;
    return this;
}

SubqueryContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SubqueryContext.prototype.constructor = SubqueryContext;

SubqueryContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

SubqueryContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSubquery(this);
	}
};

SubqueryContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSubquery(this);
	}
};




tsqlParser.SubqueryContext = SubqueryContext;

tsqlParser.prototype.subquery = function() {

    var localctx = new SubqueryContext(this, this._ctx, this.state);
    this.enterRule(localctx, 174, tsqlParser.RULE_subquery);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2019;
        this.select_statement();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function With_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_with_expression;
    return this;
}

With_expressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
With_expressionContext.prototype.constructor = With_expressionContext;

With_expressionContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

With_expressionContext.prototype.common_table_expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Common_table_expressionContext);
    } else {
        return this.getTypedRuleContext(Common_table_expressionContext,i);
    }
};

With_expressionContext.prototype.XMLNAMESPACES = function() {
    return this.getToken(tsqlParser.XMLNAMESPACES, 0);
};

With_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWith_expression(this);
	}
};

With_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWith_expression(this);
	}
};




tsqlParser.With_expressionContext = With_expressionContext;

tsqlParser.prototype.with_expression = function() {

    var localctx = new With_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 176, tsqlParser.RULE_with_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2021;
        this.match(tsqlParser.WITH);
        this.state = 2024;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,309,this._ctx);
        if(la_===1) {
            this.state = 2022;
            this.match(tsqlParser.XMLNAMESPACES);
            this.state = 2023;
            this.match(tsqlParser.COMMA);

        }
        this.state = 2026;
        this.common_table_expression();
        this.state = 2031;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2027;
            this.match(tsqlParser.COMMA);
            this.state = 2028;
            this.common_table_expression();
            this.state = 2033;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Common_table_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_common_table_expression;
    this.expression_name = null; // R_idContext
    return this;
}

Common_table_expressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Common_table_expressionContext.prototype.constructor = Common_table_expressionContext;

Common_table_expressionContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Common_table_expressionContext.prototype.select_statement = function() {
    return this.getTypedRuleContext(Select_statementContext,0);
};

Common_table_expressionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Common_table_expressionContext.prototype.column_name_list = function() {
    return this.getTypedRuleContext(Column_name_listContext,0);
};

Common_table_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCommon_table_expression(this);
	}
};

Common_table_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCommon_table_expression(this);
	}
};




tsqlParser.Common_table_expressionContext = Common_table_expressionContext;

tsqlParser.prototype.common_table_expression = function() {

    var localctx = new Common_table_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 178, tsqlParser.RULE_common_table_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2034;
        localctx.expression_name = this.r_id();
        this.state = 2039;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.LR_BRACKET) {
            this.state = 2035;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2036;
            this.column_name_list();
            this.state = 2037;
            this.match(tsqlParser.RR_BRACKET);
        }

        this.state = 2041;
        this.match(tsqlParser.AS);
        this.state = 2042;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2043;
        this.select_statement();
        this.state = 2044;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Update_elemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_update_elem;
    this.udt_column_name = null; // R_idContext
    this.method_name = null; // R_idContext
    return this;
}

Update_elemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Update_elemContext.prototype.constructor = Update_elemContext;

Update_elemContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Update_elemContext.prototype.full_column_name = function() {
    return this.getTypedRuleContext(Full_column_nameContext,0);
};

Update_elemContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Update_elemContext.prototype.assignment_operator = function() {
    return this.getTypedRuleContext(Assignment_operatorContext,0);
};

Update_elemContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Update_elemContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Update_elemContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUpdate_elem(this);
	}
};

Update_elemContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUpdate_elem(this);
	}
};




tsqlParser.Update_elemContext = Update_elemContext;

tsqlParser.prototype.update_elem = function() {

    var localctx = new Update_elemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 180, tsqlParser.RULE_update_elem);
    try {
        this.state = 2062;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,314,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2048;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 2046;
                this.full_column_name();
                break;
            case tsqlParser.LOCAL_ID:
                this.state = 2047;
                this.match(tsqlParser.LOCAL_ID);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2052;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.EQUAL:
                this.state = 2050;
                this.match(tsqlParser.EQUAL);
                break;
            case tsqlParser.PLUS_ASSIGN:
            case tsqlParser.MINUS_ASSIGN:
            case tsqlParser.MULT_ASSIGN:
            case tsqlParser.DIV_ASSIGN:
            case tsqlParser.MOD_ASSIGN:
            case tsqlParser.AND_ASSIGN:
            case tsqlParser.XOR_ASSIGN:
            case tsqlParser.OR_ASSIGN:
                this.state = 2051;
                this.assignment_operator();
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2054;
            this.expression(0);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2055;
            localctx.udt_column_name = this.r_id();
            this.state = 2056;
            this.match(tsqlParser.DOT);
            this.state = 2057;
            localctx.method_name = this.r_id();
            this.state = 2058;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2059;
            this.expression_list();
            this.state = 2060;
            this.match(tsqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Search_condition_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_search_condition_list;
    return this;
}

Search_condition_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Search_condition_listContext.prototype.constructor = Search_condition_listContext;

Search_condition_listContext.prototype.search_condition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Search_conditionContext);
    } else {
        return this.getTypedRuleContext(Search_conditionContext,i);
    }
};

Search_condition_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSearch_condition_list(this);
	}
};

Search_condition_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSearch_condition_list(this);
	}
};




tsqlParser.Search_condition_listContext = Search_condition_listContext;

tsqlParser.prototype.search_condition_list = function() {

    var localctx = new Search_condition_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 182, tsqlParser.RULE_search_condition_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2064;
        this.search_condition(0);
        this.state = 2069;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2065;
            this.match(tsqlParser.COMMA);
            this.state = 2066;
            this.search_condition(0);
            this.state = 2071;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Search_conditionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_search_condition;
    return this;
}

Search_conditionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Search_conditionContext.prototype.constructor = Search_conditionContext;


 
Search_conditionContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};

function Search_cond_andContext(parser, ctx) {
	Search_conditionContext.call(this, parser);
    this.left = null; // Search_conditionContext;
    this.op = null; // Token;
    this.right = null; // Search_conditionContext;
    Search_conditionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Search_cond_andContext.prototype = Object.create(Search_conditionContext.prototype);
Search_cond_andContext.prototype.constructor = Search_cond_andContext;

tsqlParser.Search_cond_andContext = Search_cond_andContext;

Search_cond_andContext.prototype.search_condition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Search_conditionContext);
    } else {
        return this.getTypedRuleContext(Search_conditionContext,i);
    }
};

Search_cond_andContext.prototype.AND = function() {
    return this.getToken(tsqlParser.AND, 0);
};
Search_cond_andContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSearch_cond_and(this);
	}
};

Search_cond_andContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSearch_cond_and(this);
	}
};


function Search_cond_predContext(parser, ctx) {
	Search_conditionContext.call(this, parser);
    Search_conditionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Search_cond_predContext.prototype = Object.create(Search_conditionContext.prototype);
Search_cond_predContext.prototype.constructor = Search_cond_predContext;

tsqlParser.Search_cond_predContext = Search_cond_predContext;

Search_cond_predContext.prototype.predicate = function() {
    return this.getTypedRuleContext(PredicateContext,0);
};
Search_cond_predContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSearch_cond_pred(this);
	}
};

Search_cond_predContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSearch_cond_pred(this);
	}
};


function Search_cond_orContext(parser, ctx) {
	Search_conditionContext.call(this, parser);
    this.left = null; // Search_conditionContext;
    this.op = null; // Token;
    this.right = null; // Search_conditionContext;
    Search_conditionContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Search_cond_orContext.prototype = Object.create(Search_conditionContext.prototype);
Search_cond_orContext.prototype.constructor = Search_cond_orContext;

tsqlParser.Search_cond_orContext = Search_cond_orContext;

Search_cond_orContext.prototype.search_condition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Search_conditionContext);
    } else {
        return this.getTypedRuleContext(Search_conditionContext,i);
    }
};

Search_cond_orContext.prototype.OR = function() {
    return this.getToken(tsqlParser.OR, 0);
};
Search_cond_orContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSearch_cond_or(this);
	}
};

Search_cond_orContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSearch_cond_or(this);
	}
};



tsqlParser.prototype.search_condition = function(_p) {
	if(_p===undefined) {
	    _p = 0;
	}
    var _parentctx = this._ctx;
    var _parentState = this.state;
    var localctx = new Search_conditionContext(this, this._ctx, _parentState);
    var _prevctx = localctx;
    var _startState = 184;
    this.enterRecursionRule(localctx, 184, tsqlParser.RULE_search_condition, _p);
    try {
        this.enterOuterAlt(localctx, 1);
        localctx = new Search_cond_predContext(this, localctx);
        this._ctx = localctx;
        _prevctx = localctx;

        this.state = 2073;
        this.predicate();
        this._ctx.stop = this._input.LT(-1);
        this.state = 2083;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,317,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                if(this._parseListeners!==null) {
                    this.triggerExitRuleEvent();
                }
                _prevctx = localctx;
                this.state = 2081;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,316,this._ctx);
                switch(la_) {
                case 1:
                    localctx = new Search_cond_andContext(this, new Search_conditionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_search_condition);
                    this.state = 2075;
                    if (!( this.precpred(this._ctx, 3))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 3)");
                    }
                    this.state = 2076;
                    localctx.op = this.match(tsqlParser.AND);
                    this.state = 2077;
                    localctx.right = this.search_condition(4);
                    break;

                case 2:
                    localctx = new Search_cond_orContext(this, new Search_conditionContext(this, _parentctx, _parentState));
                    localctx.left = _prevctx;
                    this.pushNewRecursionContext(localctx, _startState, tsqlParser.RULE_search_condition);
                    this.state = 2078;
                    if (!( this.precpred(this._ctx, 2))) {
                        throw new antlr4.error.FailedPredicateException(this, "this.precpred(this._ctx, 2)");
                    }
                    this.state = 2079;
                    localctx.op = this.match(tsqlParser.OR);
                    this.state = 2080;
                    localctx.right = this.search_condition(3);
                    break;

                } 
            }
            this.state = 2085;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,317,this._ctx);
        }

    } catch( error) {
        if(error instanceof antlr4.error.RecognitionException) {
	        localctx.exception = error;
	        this._errHandler.reportError(this, error);
	        this._errHandler.recover(this, error);
	    } else {
	    	throw error;
	    }
    } finally {
        this.unrollRecursionContexts(_parentctx)
    }
    return localctx;
};

function PredicateContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_predicate;
    return this;
}

PredicateContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
PredicateContext.prototype.constructor = PredicateContext;


 
PredicateContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function Unary_operator_expression3Context(parser, ctx) {
	PredicateContext.call(this, parser);
    this.op = null; // Token;
    this.expr = null; // PredicateContext;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Unary_operator_expression3Context.prototype = Object.create(PredicateContext.prototype);
Unary_operator_expression3Context.prototype.constructor = Unary_operator_expression3Context;

tsqlParser.Unary_operator_expression3Context = Unary_operator_expression3Context;

Unary_operator_expression3Context.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Unary_operator_expression3Context.prototype.predicate = function() {
    return this.getTypedRuleContext(PredicateContext,0);
};
Unary_operator_expression3Context.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUnary_operator_expression3(this);
	}
};

Unary_operator_expression3Context.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUnary_operator_expression3(this);
	}
};


function Binary_in_expressionContext(parser, ctx) {
	PredicateContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.op = null; // Token;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Binary_in_expressionContext.prototype = Object.create(PredicateContext.prototype);
Binary_in_expressionContext.prototype.constructor = Binary_in_expressionContext;

tsqlParser.Binary_in_expressionContext = Binary_in_expressionContext;

Binary_in_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Binary_in_expressionContext.prototype.IN = function() {
    return this.getToken(tsqlParser.IN, 0);
};

Binary_in_expressionContext.prototype.subquery = function() {
    return this.getTypedRuleContext(SubqueryContext,0);
};

Binary_in_expressionContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Binary_in_expressionContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};
Binary_in_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBinary_in_expression(this);
	}
};

Binary_in_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBinary_in_expression(this);
	}
};


function Binary_operator_expression2Context(parser, ctx) {
	PredicateContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.op = null; // Comparison_operatorContext;
    this.right = null; // ExpressionContext;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Binary_operator_expression2Context.prototype = Object.create(PredicateContext.prototype);
Binary_operator_expression2Context.prototype.constructor = Binary_operator_expression2Context;

tsqlParser.Binary_operator_expression2Context = Binary_operator_expression2Context;

Binary_operator_expression2Context.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Binary_operator_expression2Context.prototype.comparison_operator = function() {
    return this.getTypedRuleContext(Comparison_operatorContext,0);
};

Binary_operator_expression2Context.prototype.IS = function() {
    return this.getToken(tsqlParser.IS, 0);
};

Binary_operator_expression2Context.prototype.null_notnull = function() {
    return this.getTypedRuleContext(Null_notnullContext,0);
};
Binary_operator_expression2Context.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBinary_operator_expression2(this);
	}
};

Binary_operator_expression2Context.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBinary_operator_expression2(this);
	}
};


function Sublink_expressionContext(parser, ctx) {
	PredicateContext.call(this, parser);
    this.test_expr = null; // ExpressionContext;
    this.op = null; // Comparison_operatorContext;
    this.pref = null; // Token;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Sublink_expressionContext.prototype = Object.create(PredicateContext.prototype);
Sublink_expressionContext.prototype.constructor = Sublink_expressionContext;

tsqlParser.Sublink_expressionContext = Sublink_expressionContext;

Sublink_expressionContext.prototype.subquery = function() {
    return this.getTypedRuleContext(SubqueryContext,0);
};

Sublink_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Sublink_expressionContext.prototype.comparison_operator = function() {
    return this.getTypedRuleContext(Comparison_operatorContext,0);
};

Sublink_expressionContext.prototype.ALL = function() {
    return this.getToken(tsqlParser.ALL, 0);
};

Sublink_expressionContext.prototype.SOME = function() {
    return this.getToken(tsqlParser.SOME, 0);
};

Sublink_expressionContext.prototype.ANY = function() {
    return this.getToken(tsqlParser.ANY, 0);
};
Sublink_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSublink_expression(this);
	}
};

Sublink_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSublink_expression(this);
	}
};


function Bracket_search_expressionContext(parser, ctx) {
	PredicateContext.call(this, parser);
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Bracket_search_expressionContext.prototype = Object.create(PredicateContext.prototype);
Bracket_search_expressionContext.prototype.constructor = Bracket_search_expressionContext;

tsqlParser.Bracket_search_expressionContext = Bracket_search_expressionContext;

Bracket_search_expressionContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};
Bracket_search_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBracket_search_expression(this);
	}
};

Bracket_search_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBracket_search_expression(this);
	}
};


function Decimal_expressionContext(parser, ctx) {
	PredicateContext.call(this, parser);
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Decimal_expressionContext.prototype = Object.create(PredicateContext.prototype);
Decimal_expressionContext.prototype.constructor = Decimal_expressionContext;

tsqlParser.Decimal_expressionContext = Decimal_expressionContext;

Decimal_expressionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};
Decimal_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDecimal_expression(this);
	}
};

Decimal_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDecimal_expression(this);
	}
};


function Unary_operator_expression2Context(parser, ctx) {
	PredicateContext.call(this, parser);
    this.op = null; // Token;
    this.expr = null; // SubqueryContext;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Unary_operator_expression2Context.prototype = Object.create(PredicateContext.prototype);
Unary_operator_expression2Context.prototype.constructor = Unary_operator_expression2Context;

tsqlParser.Unary_operator_expression2Context = Unary_operator_expression2Context;

Unary_operator_expression2Context.prototype.EXISTS = function() {
    return this.getToken(tsqlParser.EXISTS, 0);
};

Unary_operator_expression2Context.prototype.subquery = function() {
    return this.getTypedRuleContext(SubqueryContext,0);
};
Unary_operator_expression2Context.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUnary_operator_expression2(this);
	}
};

Unary_operator_expression2Context.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUnary_operator_expression2(this);
	}
};


function Binary_mod_expressionContext(parser, ctx) {
	PredicateContext.call(this, parser);
    this.left = null; // ExpressionContext;
    this.op = null; // Token;
    this._expression = null; // ExpressionContext;
    this.right = []; // of ExpressionContexts;
    PredicateContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Binary_mod_expressionContext.prototype = Object.create(PredicateContext.prototype);
Binary_mod_expressionContext.prototype.constructor = Binary_mod_expressionContext;

tsqlParser.Binary_mod_expressionContext = Binary_mod_expressionContext;

Binary_mod_expressionContext.prototype.AND = function() {
    return this.getToken(tsqlParser.AND, 0);
};

Binary_mod_expressionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Binary_mod_expressionContext.prototype.BETWEEN = function() {
    return this.getToken(tsqlParser.BETWEEN, 0);
};

Binary_mod_expressionContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Binary_mod_expressionContext.prototype.LIKE = function() {
    return this.getToken(tsqlParser.LIKE, 0);
};

Binary_mod_expressionContext.prototype.ESCAPE = function() {
    return this.getToken(tsqlParser.ESCAPE, 0);
};
Binary_mod_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBinary_mod_expression(this);
	}
};

Binary_mod_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBinary_mod_expression(this);
	}
};



tsqlParser.PredicateContext = PredicateContext;

tsqlParser.prototype.predicate = function() {

    var localctx = new PredicateContext(this, this._ctx, this.state);
    this.enterRule(localctx, 186, tsqlParser.RULE_predicate);
    var _la = 0; // Token type
    try {
        this.state = 2144;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,323,this._ctx);
        switch(la_) {
        case 1:
            localctx = new Unary_operator_expression3Context(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2086;
            localctx.op = this.match(tsqlParser.NOT);
            this.state = 2087;
            localctx.expr = this.predicate();
            break;

        case 2:
            localctx = new Unary_operator_expression2Context(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2088;
            localctx.op = this.match(tsqlParser.EXISTS);
            this.state = 2089;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2090;
            localctx.expr = this.subquery();
            this.state = 2091;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 3:
            localctx = new Binary_operator_expression2Context(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2093;
            localctx.left = this.expression(0);
            this.state = 2094;
            localctx.op = this.comparison_operator();
            this.state = 2095;
            localctx.right = this.expression(0);
            break;

        case 4:
            localctx = new Sublink_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2097;
            localctx.test_expr = this.expression(0);
            this.state = 2098;
            localctx.op = this.comparison_operator();
            this.state = 2099;
            localctx.pref = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ALL || _la===tsqlParser.ANY || _la===tsqlParser.SOME)) {
                localctx.pref = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2100;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2101;
            this.subquery();
            this.state = 2102;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 5:
            localctx = new Binary_mod_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2104;
            localctx.left = this.expression(0);
            this.state = 2106;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.NOT) {
                this.state = 2105;
                this.match(tsqlParser.NOT);
            }

            this.state = 2108;
            localctx.op = this.match(tsqlParser.BETWEEN);
            this.state = 2109;
            localctx._expression = this.expression(0);
            localctx.right.push(localctx._expression);
            this.state = 2110;
            this.match(tsqlParser.AND);
            this.state = 2111;
            localctx._expression = this.expression(0);
            localctx.right.push(localctx._expression);
            break;

        case 6:
            localctx = new Binary_in_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 2113;
            localctx.left = this.expression(0);
            this.state = 2115;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.NOT) {
                this.state = 2114;
                this.match(tsqlParser.NOT);
            }

            this.state = 2117;
            localctx.op = this.match(tsqlParser.IN);
            this.state = 2118;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2121;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,320,this._ctx);
            switch(la_) {
            case 1:
                this.state = 2119;
                this.subquery();
                break;

            case 2:
                this.state = 2120;
                this.expression_list();
                break;

            }
            this.state = 2123;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 7:
            localctx = new Binary_mod_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 2125;
            localctx.left = this.expression(0);
            this.state = 2127;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.NOT) {
                this.state = 2126;
                this.match(tsqlParser.NOT);
            }

            this.state = 2129;
            localctx.op = this.match(tsqlParser.LIKE);
            this.state = 2130;
            localctx._expression = this.expression(0);
            localctx.right.push(localctx._expression);
            this.state = 2133;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,322,this._ctx);
            if(la_===1) {
                this.state = 2131;
                this.match(tsqlParser.ESCAPE);
                this.state = 2132;
                localctx._expression = this.expression(0);
                localctx.right.push(localctx._expression);

            }
            break;

        case 8:
            localctx = new Binary_operator_expression2Context(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 2135;
            this.expression(0);
            this.state = 2136;
            this.match(tsqlParser.IS);
            this.state = 2137;
            this.null_notnull();
            break;

        case 9:
            localctx = new Bracket_search_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 2139;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2140;
            this.search_condition(0);
            this.state = 2141;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 10:
            localctx = new Decimal_expressionContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 2143;
            this.match(tsqlParser.DECIMAL);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Query_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_query_expression;
    return this;
}

Query_expressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Query_expressionContext.prototype.constructor = Query_expressionContext;

Query_expressionContext.prototype.query_specification = function() {
    return this.getTypedRuleContext(Query_specificationContext,0);
};

Query_expressionContext.prototype.query_expression = function() {
    return this.getTypedRuleContext(Query_expressionContext,0);
};

Query_expressionContext.prototype.union = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(UnionContext);
    } else {
        return this.getTypedRuleContext(UnionContext,i);
    }
};

Query_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterQuery_expression(this);
	}
};

Query_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitQuery_expression(this);
	}
};




tsqlParser.Query_expressionContext = Query_expressionContext;

tsqlParser.prototype.query_expression = function() {

    var localctx = new Query_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 188, tsqlParser.RULE_query_expression);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2151;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.SELECT:
            this.state = 2146;
            this.query_specification();
            break;
        case tsqlParser.LR_BRACKET:
            this.state = 2147;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2148;
            this.query_expression();
            this.state = 2149;
            this.match(tsqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 2156;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,325,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2153;
                this.union(); 
            }
            this.state = 2158;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,325,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function UnionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_union;
    return this;
}

UnionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
UnionContext.prototype.constructor = UnionContext;

UnionContext.prototype.UNION = function() {
    return this.getToken(tsqlParser.UNION, 0);
};

UnionContext.prototype.EXCEPT = function() {
    return this.getToken(tsqlParser.EXCEPT, 0);
};

UnionContext.prototype.INTERSECT = function() {
    return this.getToken(tsqlParser.INTERSECT, 0);
};

UnionContext.prototype.query_specification = function() {
    return this.getTypedRuleContext(Query_specificationContext,0);
};

UnionContext.prototype.ALL = function() {
    return this.getToken(tsqlParser.ALL, 0);
};

UnionContext.prototype.query_expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Query_expressionContext);
    } else {
        return this.getTypedRuleContext(Query_expressionContext,i);
    }
};

UnionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterUnion(this);
	}
};

UnionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitUnion(this);
	}
};




tsqlParser.UnionContext = UnionContext;

tsqlParser.prototype.union = function() {

    var localctx = new UnionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 190, tsqlParser.RULE_union);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2165;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.UNION:
            this.state = 2159;
            this.match(tsqlParser.UNION);
            this.state = 2161;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ALL) {
                this.state = 2160;
                this.match(tsqlParser.ALL);
            }

            break;
        case tsqlParser.EXCEPT:
            this.state = 2163;
            this.match(tsqlParser.EXCEPT);
            break;
        case tsqlParser.INTERSECT:
            this.state = 2164;
            this.match(tsqlParser.INTERSECT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 2176;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.SELECT:
            this.state = 2167;
            this.query_specification();
            break;
        case tsqlParser.LR_BRACKET:
            this.state = 2172; 
            this._errHandler.sync(this);
            var _alt = 1;
            do {
            	switch (_alt) {
            	case 1:
            		this.state = 2168;
            		this.match(tsqlParser.LR_BRACKET);
            		this.state = 2169;
            		this.query_expression();
            		this.state = 2170;
            		this.match(tsqlParser.RR_BRACKET);
            		break;
            	default:
            		throw new antlr4.error.NoViableAltException(this);
            	}
            	this.state = 2174; 
            	this._errHandler.sync(this);
            	_alt = this._interp.adaptivePredict(this._input,328, this._ctx);
            } while ( _alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER );
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Query_specificationContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_query_specification;
    this.pref = null; // Token
    this.where = null; // Search_conditionContext
    this.having = null; // Search_conditionContext
    return this;
}

Query_specificationContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Query_specificationContext.prototype.constructor = Query_specificationContext;

Query_specificationContext.prototype.SELECT = function() {
    return this.getToken(tsqlParser.SELECT, 0);
};

Query_specificationContext.prototype.select_list = function() {
    return this.getTypedRuleContext(Select_listContext,0);
};

Query_specificationContext.prototype.top_clause = function() {
    return this.getTypedRuleContext(Top_clauseContext,0);
};

Query_specificationContext.prototype.INTO = function() {
    return this.getToken(tsqlParser.INTO, 0);
};

Query_specificationContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Query_specificationContext.prototype.FROM = function() {
    return this.getToken(tsqlParser.FROM, 0);
};

Query_specificationContext.prototype.table_sources = function() {
    return this.getTypedRuleContext(Table_sourcesContext,0);
};

Query_specificationContext.prototype.WHERE = function() {
    return this.getToken(tsqlParser.WHERE, 0);
};

Query_specificationContext.prototype.GROUP = function() {
    return this.getToken(tsqlParser.GROUP, 0);
};

Query_specificationContext.prototype.BY = function() {
    return this.getToken(tsqlParser.BY, 0);
};

Query_specificationContext.prototype.group_by_item = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Group_by_itemContext);
    } else {
        return this.getTypedRuleContext(Group_by_itemContext,i);
    }
};

Query_specificationContext.prototype.HAVING = function() {
    return this.getToken(tsqlParser.HAVING, 0);
};

Query_specificationContext.prototype.search_condition = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Search_conditionContext);
    } else {
        return this.getTypedRuleContext(Search_conditionContext,i);
    }
};

Query_specificationContext.prototype.ALL = function() {
    return this.getToken(tsqlParser.ALL, 0);
};

Query_specificationContext.prototype.DISTINCT = function() {
    return this.getToken(tsqlParser.DISTINCT, 0);
};

Query_specificationContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterQuery_specification(this);
	}
};

Query_specificationContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitQuery_specification(this);
	}
};




tsqlParser.Query_specificationContext = Query_specificationContext;

tsqlParser.prototype.query_specification = function() {

    var localctx = new Query_specificationContext(this, this._ctx, this.state);
    this.enterRule(localctx, 192, tsqlParser.RULE_query_specification);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2178;
        this.match(tsqlParser.SELECT);
        this.state = 2180;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT) {
            this.state = 2179;
            localctx.pref = this._input.LT(1);
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT)) {
                localctx.pref = this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

        this.state = 2183;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.TOP) {
            this.state = 2182;
            this.top_clause();
        }

        this.state = 2185;
        this.select_list();
        this.state = 2188;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.INTO) {
            this.state = 2186;
            this.match(tsqlParser.INTO);
            this.state = 2187;
            this.table_name();
        }

        this.state = 2192;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FROM) {
            this.state = 2190;
            this.match(tsqlParser.FROM);
            this.state = 2191;
            this.table_sources();
        }

        this.state = 2196;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,334,this._ctx);
        if(la_===1) {
            this.state = 2194;
            this.match(tsqlParser.WHERE);
            this.state = 2195;
            localctx.where = this.search_condition(0);

        }
        this.state = 2208;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,336,this._ctx);
        if(la_===1) {
            this.state = 2198;
            this.match(tsqlParser.GROUP);
            this.state = 2199;
            this.match(tsqlParser.BY);
            this.state = 2200;
            this.group_by_item();
            this.state = 2205;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,335,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 2201;
                    this.match(tsqlParser.COMMA);
                    this.state = 2202;
                    this.group_by_item(); 
                }
                this.state = 2207;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,335,this._ctx);
            }


        }
        this.state = 2212;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,337,this._ctx);
        if(la_===1) {
            this.state = 2210;
            this.match(tsqlParser.HAVING);
            this.state = 2211;
            localctx.having = this.search_condition(0);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Top_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_top_clause;
    return this;
}

Top_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Top_clauseContext.prototype.constructor = Top_clauseContext;

Top_clauseContext.prototype.TOP = function() {
    return this.getToken(tsqlParser.TOP, 0);
};

Top_clauseContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Top_clauseContext.prototype.PERCENT = function() {
    return this.getToken(tsqlParser.PERCENT, 0);
};

Top_clauseContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Top_clauseContext.prototype.TIES = function() {
    return this.getToken(tsqlParser.TIES, 0);
};

Top_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTop_clause(this);
	}
};

Top_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTop_clause(this);
	}
};




tsqlParser.Top_clauseContext = Top_clauseContext;

tsqlParser.prototype.top_clause = function() {

    var localctx = new Top_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 194, tsqlParser.RULE_top_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2214;
        this.match(tsqlParser.TOP);
        this.state = 2215;
        this.expression(0);
        this.state = 2217;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.PERCENT) {
            this.state = 2216;
            this.match(tsqlParser.PERCENT);
        }

        this.state = 2221;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 2219;
            this.match(tsqlParser.WITH);
            this.state = 2220;
            this.match(tsqlParser.TIES);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Order_by_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_order_by_clause;
    return this;
}

Order_by_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Order_by_clauseContext.prototype.constructor = Order_by_clauseContext;

Order_by_clauseContext.prototype.ORDER = function() {
    return this.getToken(tsqlParser.ORDER, 0);
};

Order_by_clauseContext.prototype.BY = function() {
    return this.getToken(tsqlParser.BY, 0);
};

Order_by_clauseContext.prototype.order_by_expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Order_by_expressionContext);
    } else {
        return this.getTypedRuleContext(Order_by_expressionContext,i);
    }
};

Order_by_clauseContext.prototype.OFFSET = function() {
    return this.getToken(tsqlParser.OFFSET, 0);
};

Order_by_clauseContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Order_by_clauseContext.prototype.ROW = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ROW);
    } else {
        return this.getToken(tsqlParser.ROW, i);
    }
};


Order_by_clauseContext.prototype.ROWS = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ROWS);
    } else {
        return this.getToken(tsqlParser.ROWS, i);
    }
};


Order_by_clauseContext.prototype.FETCH = function() {
    return this.getToken(tsqlParser.FETCH, 0);
};

Order_by_clauseContext.prototype.ONLY = function() {
    return this.getToken(tsqlParser.ONLY, 0);
};

Order_by_clauseContext.prototype.FIRST = function() {
    return this.getToken(tsqlParser.FIRST, 0);
};

Order_by_clauseContext.prototype.NEXT = function() {
    return this.getToken(tsqlParser.NEXT, 0);
};

Order_by_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOrder_by_clause(this);
	}
};

Order_by_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOrder_by_clause(this);
	}
};




tsqlParser.Order_by_clauseContext = Order_by_clauseContext;

tsqlParser.prototype.order_by_clause = function() {

    var localctx = new Order_by_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 196, tsqlParser.RULE_order_by_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2223;
        this.match(tsqlParser.ORDER);
        this.state = 2224;
        this.match(tsqlParser.BY);
        this.state = 2225;
        this.order_by_expression();
        this.state = 2230;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,340,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2226;
                this.match(tsqlParser.COMMA);
                this.state = 2227;
                this.order_by_expression(); 
            }
            this.state = 2232;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,340,this._ctx);
        }

        this.state = 2244;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,342,this._ctx);
        if(la_===1) {
            this.state = 2233;
            this.match(tsqlParser.OFFSET);
            this.state = 2234;
            this.expression(0);
            this.state = 2235;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ROW || _la===tsqlParser.ROWS)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2242;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,341,this._ctx);
            if(la_===1) {
                this.state = 2236;
                this.match(tsqlParser.FETCH);
                this.state = 2237;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.FIRST || _la===tsqlParser.NEXT)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2238;
                this.expression(0);
                this.state = 2239;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.ROW || _la===tsqlParser.ROWS)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2240;
                this.match(tsqlParser.ONLY);

            }

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function For_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_for_clause;
    return this;
}

For_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
For_clauseContext.prototype.constructor = For_clauseContext;

For_clauseContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

For_clauseContext.prototype.BROWSE = function() {
    return this.getToken(tsqlParser.BROWSE, 0);
};

For_clauseContext.prototype.XML = function() {
    return this.getToken(tsqlParser.XML, 0);
};

For_clauseContext.prototype.AUTO = function() {
    return this.getToken(tsqlParser.AUTO, 0);
};

For_clauseContext.prototype.xml_common_directives = function() {
    return this.getTypedRuleContext(Xml_common_directivesContext,0);
};

For_clauseContext.prototype.PATH = function() {
    return this.getToken(tsqlParser.PATH, 0);
};

For_clauseContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

For_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFor_clause(this);
	}
};

For_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFor_clause(this);
	}
};




tsqlParser.For_clauseContext = For_clauseContext;

tsqlParser.prototype.for_clause = function() {

    var localctx = new For_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 198, tsqlParser.RULE_for_clause);
    try {
        this.state = 2265;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,346,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2246;
            this.match(tsqlParser.FOR);
            this.state = 2247;
            this.match(tsqlParser.BROWSE);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2248;
            this.match(tsqlParser.FOR);
            this.state = 2249;
            this.match(tsqlParser.XML);
            this.state = 2250;
            this.match(tsqlParser.AUTO);
            this.state = 2252;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,343,this._ctx);
            if(la_===1) {
                this.state = 2251;
                this.xml_common_directives();

            }
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2254;
            this.match(tsqlParser.FOR);
            this.state = 2255;
            this.match(tsqlParser.XML);
            this.state = 2256;
            this.match(tsqlParser.PATH);
            this.state = 2260;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,344,this._ctx);
            if(la_===1) {
                this.state = 2257;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 2258;
                this.match(tsqlParser.STRING);
                this.state = 2259;
                this.match(tsqlParser.RR_BRACKET);

            }
            this.state = 2263;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,345,this._ctx);
            if(la_===1) {
                this.state = 2262;
                this.xml_common_directives();

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Xml_common_directivesContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_xml_common_directives;
    return this;
}

Xml_common_directivesContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Xml_common_directivesContext.prototype.constructor = Xml_common_directivesContext;

Xml_common_directivesContext.prototype.BINARY = function() {
    return this.getToken(tsqlParser.BINARY, 0);
};

Xml_common_directivesContext.prototype.BASE64 = function() {
    return this.getToken(tsqlParser.BASE64, 0);
};

Xml_common_directivesContext.prototype.TYPE = function() {
    return this.getToken(tsqlParser.TYPE, 0);
};

Xml_common_directivesContext.prototype.ROOT = function() {
    return this.getToken(tsqlParser.ROOT, 0);
};

Xml_common_directivesContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterXml_common_directives(this);
	}
};

Xml_common_directivesContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitXml_common_directives(this);
	}
};




tsqlParser.Xml_common_directivesContext = Xml_common_directivesContext;

tsqlParser.prototype.xml_common_directives = function() {

    var localctx = new Xml_common_directivesContext(this, this._ctx, this.state);
    this.enterRule(localctx, 200, tsqlParser.RULE_xml_common_directives);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2267;
        this.match(tsqlParser.COMMA);
        this.state = 2272;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.BINARY:
            this.state = 2268;
            this.match(tsqlParser.BINARY);
            this.state = 2269;
            this.match(tsqlParser.BASE64);
            break;
        case tsqlParser.TYPE:
            this.state = 2270;
            this.match(tsqlParser.TYPE);
            break;
        case tsqlParser.ROOT:
            this.state = 2271;
            this.match(tsqlParser.ROOT);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Order_by_expressionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_order_by_expression;
    return this;
}

Order_by_expressionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Order_by_expressionContext.prototype.constructor = Order_by_expressionContext;

Order_by_expressionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Order_by_expressionContext.prototype.ASC = function() {
    return this.getToken(tsqlParser.ASC, 0);
};

Order_by_expressionContext.prototype.DESC = function() {
    return this.getToken(tsqlParser.DESC, 0);
};

Order_by_expressionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOrder_by_expression(this);
	}
};

Order_by_expressionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOrder_by_expression(this);
	}
};




tsqlParser.Order_by_expressionContext = Order_by_expressionContext;

tsqlParser.prototype.order_by_expression = function() {

    var localctx = new Order_by_expressionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 202, tsqlParser.RULE_order_by_expression);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2274;
        this.expression(0);
        this.state = 2276;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ASC || _la===tsqlParser.DESC) {
            this.state = 2275;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ASC || _la===tsqlParser.DESC)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Group_by_itemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_group_by_item;
    return this;
}

Group_by_itemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Group_by_itemContext.prototype.constructor = Group_by_itemContext;

Group_by_itemContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Group_by_itemContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterGroup_by_item(this);
	}
};

Group_by_itemContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitGroup_by_item(this);
	}
};




tsqlParser.Group_by_itemContext = Group_by_itemContext;

tsqlParser.prototype.group_by_item = function() {

    var localctx = new Group_by_itemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 204, tsqlParser.RULE_group_by_item);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2278;
        this.expression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Option_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_option_clause;
    return this;
}

Option_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Option_clauseContext.prototype.constructor = Option_clauseContext;

Option_clauseContext.prototype.OPTION = function() {
    return this.getToken(tsqlParser.OPTION, 0);
};

Option_clauseContext.prototype.option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(OptionContext);
    } else {
        return this.getTypedRuleContext(OptionContext,i);
    }
};

Option_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOption_clause(this);
	}
};

Option_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOption_clause(this);
	}
};




tsqlParser.Option_clauseContext = Option_clauseContext;

tsqlParser.prototype.option_clause = function() {

    var localctx = new Option_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 206, tsqlParser.RULE_option_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2280;
        this.match(tsqlParser.OPTION);
        this.state = 2281;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2282;
        this.option();
        this.state = 2287;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2283;
            this.match(tsqlParser.COMMA);
            this.state = 2284;
            this.option();
            this.state = 2289;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2290;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function OptionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_option;
    this.number_rows = null; // Token
    this.number_of_processors = null; // Token
    this.number_recursion = null; // Token
    return this;
}

OptionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
OptionContext.prototype.constructor = OptionContext;

OptionContext.prototype.FAST = function() {
    return this.getToken(tsqlParser.FAST, 0);
};

OptionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

OptionContext.prototype.GROUP = function() {
    return this.getToken(tsqlParser.GROUP, 0);
};

OptionContext.prototype.HASH = function() {
    return this.getToken(tsqlParser.HASH, 0);
};

OptionContext.prototype.ORDER = function() {
    return this.getToken(tsqlParser.ORDER, 0);
};

OptionContext.prototype.UNION = function() {
    return this.getToken(tsqlParser.UNION, 0);
};

OptionContext.prototype.MERGE = function() {
    return this.getToken(tsqlParser.MERGE, 0);
};

OptionContext.prototype.CONCAT = function() {
    return this.getToken(tsqlParser.CONCAT, 0);
};

OptionContext.prototype.JOIN = function() {
    return this.getToken(tsqlParser.JOIN, 0);
};

OptionContext.prototype.LOOP = function() {
    return this.getToken(tsqlParser.LOOP, 0);
};

OptionContext.prototype.EXPAND = function() {
    return this.getToken(tsqlParser.EXPAND, 0);
};

OptionContext.prototype.VIEWS = function() {
    return this.getToken(tsqlParser.VIEWS, 0);
};

OptionContext.prototype.FORCE = function() {
    return this.getToken(tsqlParser.FORCE, 0);
};

OptionContext.prototype.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX = function() {
    return this.getToken(tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX, 0);
};

OptionContext.prototype.KEEP = function() {
    return this.getToken(tsqlParser.KEEP, 0);
};

OptionContext.prototype.PLAN = function() {
    return this.getToken(tsqlParser.PLAN, 0);
};

OptionContext.prototype.KEEPFIXED = function() {
    return this.getToken(tsqlParser.KEEPFIXED, 0);
};

OptionContext.prototype.MAXDOP = function() {
    return this.getToken(tsqlParser.MAXDOP, 0);
};

OptionContext.prototype.MAXRECURSION = function() {
    return this.getToken(tsqlParser.MAXRECURSION, 0);
};

OptionContext.prototype.OPTIMIZE = function() {
    return this.getToken(tsqlParser.OPTIMIZE, 0);
};

OptionContext.prototype.FOR = function() {
    return this.getToken(tsqlParser.FOR, 0);
};

OptionContext.prototype.optimize_for_arg = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Optimize_for_argContext);
    } else {
        return this.getTypedRuleContext(Optimize_for_argContext,i);
    }
};

OptionContext.prototype.UNKNOWN = function() {
    return this.getToken(tsqlParser.UNKNOWN, 0);
};

OptionContext.prototype.PARAMETERIZATION = function() {
    return this.getToken(tsqlParser.PARAMETERIZATION, 0);
};

OptionContext.prototype.SIMPLE = function() {
    return this.getToken(tsqlParser.SIMPLE, 0);
};

OptionContext.prototype.FORCED = function() {
    return this.getToken(tsqlParser.FORCED, 0);
};

OptionContext.prototype.RECOMPILE = function() {
    return this.getToken(tsqlParser.RECOMPILE, 0);
};

OptionContext.prototype.ROBUST = function() {
    return this.getToken(tsqlParser.ROBUST, 0);
};

OptionContext.prototype.USE = function() {
    return this.getToken(tsqlParser.USE, 0);
};

OptionContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

OptionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOption(this);
	}
};

OptionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOption(this);
	}
};




tsqlParser.OptionContext = OptionContext;

tsqlParser.prototype.option = function() {

    var localctx = new OptionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 208, tsqlParser.RULE_option);
    var _la = 0; // Token type
    try {
        this.state = 2337;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,351,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2292;
            this.match(tsqlParser.FAST);
            this.state = 2293;
            localctx.number_rows = this.match(tsqlParser.DECIMAL);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2294;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.ORDER || _la===tsqlParser.HASH)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2295;
            this.match(tsqlParser.GROUP);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2296;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.MERGE || _la===tsqlParser.CONCAT || _la===tsqlParser.HASH)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2297;
            this.match(tsqlParser.UNION);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2298;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.MERGE || _la===tsqlParser.HASH || _la===tsqlParser.LOOP)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2299;
            this.match(tsqlParser.JOIN);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2300;
            this.match(tsqlParser.EXPAND);
            this.state = 2301;
            this.match(tsqlParser.VIEWS);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 2302;
            this.match(tsqlParser.FORCE);
            this.state = 2303;
            this.match(tsqlParser.ORDER);
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 2304;
            this.match(tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 2305;
            this.match(tsqlParser.KEEP);
            this.state = 2306;
            this.match(tsqlParser.PLAN);
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 2307;
            this.match(tsqlParser.KEEPFIXED);
            this.state = 2308;
            this.match(tsqlParser.PLAN);
            break;

        case 10:
            this.enterOuterAlt(localctx, 10);
            this.state = 2309;
            this.match(tsqlParser.MAXDOP);
            this.state = 2310;
            localctx.number_of_processors = this.match(tsqlParser.DECIMAL);
            break;

        case 11:
            this.enterOuterAlt(localctx, 11);
            this.state = 2311;
            this.match(tsqlParser.MAXRECURSION);
            this.state = 2312;
            localctx.number_recursion = this.match(tsqlParser.DECIMAL);
            break;

        case 12:
            this.enterOuterAlt(localctx, 12);
            this.state = 2313;
            this.match(tsqlParser.OPTIMIZE);
            this.state = 2314;
            this.match(tsqlParser.FOR);
            this.state = 2315;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2316;
            this.optimize_for_arg();
            this.state = 2321;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 2317;
                this.match(tsqlParser.COMMA);
                this.state = 2318;
                this.optimize_for_arg();
                this.state = 2323;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 2324;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 13:
            this.enterOuterAlt(localctx, 13);
            this.state = 2326;
            this.match(tsqlParser.OPTIMIZE);
            this.state = 2327;
            this.match(tsqlParser.FOR);
            this.state = 2328;
            this.match(tsqlParser.UNKNOWN);
            break;

        case 14:
            this.enterOuterAlt(localctx, 14);
            this.state = 2329;
            this.match(tsqlParser.PARAMETERIZATION);
            this.state = 2330;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.FORCED || _la===tsqlParser.SIMPLE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 15:
            this.enterOuterAlt(localctx, 15);
            this.state = 2331;
            this.match(tsqlParser.RECOMPILE);
            break;

        case 16:
            this.enterOuterAlt(localctx, 16);
            this.state = 2332;
            this.match(tsqlParser.ROBUST);
            this.state = 2333;
            this.match(tsqlParser.PLAN);
            break;

        case 17:
            this.enterOuterAlt(localctx, 17);
            this.state = 2334;
            this.match(tsqlParser.USE);
            this.state = 2335;
            this.match(tsqlParser.PLAN);
            this.state = 2336;
            this.match(tsqlParser.STRING);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Optimize_for_argContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_optimize_for_arg;
    return this;
}

Optimize_for_argContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Optimize_for_argContext.prototype.constructor = Optimize_for_argContext;

Optimize_for_argContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Optimize_for_argContext.prototype.UNKNOWN = function() {
    return this.getToken(tsqlParser.UNKNOWN, 0);
};

Optimize_for_argContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};

Optimize_for_argContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOptimize_for_arg(this);
	}
};

Optimize_for_argContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOptimize_for_arg(this);
	}
};




tsqlParser.Optimize_for_argContext = Optimize_for_argContext;

tsqlParser.prototype.optimize_for_arg = function() {

    var localctx = new Optimize_for_argContext(this, this._ctx, this.state);
    this.enterRule(localctx, 210, tsqlParser.RULE_optimize_for_arg);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2339;
        this.match(tsqlParser.LOCAL_ID);
        this.state = 2343;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.UNKNOWN:
            this.state = 2340;
            this.match(tsqlParser.UNKNOWN);
            break;
        case tsqlParser.EQUAL:
            this.state = 2341;
            this.match(tsqlParser.EQUAL);
            this.state = 2342;
            this.constant();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Select_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_select_list;
    return this;
}

Select_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Select_listContext.prototype.constructor = Select_listContext;

Select_listContext.prototype.select_list_elem = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Select_list_elemContext);
    } else {
        return this.getTypedRuleContext(Select_list_elemContext,i);
    }
};

Select_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSelect_list(this);
	}
};

Select_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSelect_list(this);
	}
};




tsqlParser.Select_listContext = Select_listContext;

tsqlParser.prototype.select_list = function() {

    var localctx = new Select_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 212, tsqlParser.RULE_select_list);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2345;
        this.select_list_elem();
        this.state = 2350;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,353,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2346;
                this.match(tsqlParser.COMMA);
                this.state = 2347;
                this.select_list_elem(); 
            }
            this.state = 2352;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,353,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Select_list_elemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_select_list_elem;
    this.alias = null; // Column_aliasContext
    return this;
}

Select_list_elemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Select_list_elemContext.prototype.constructor = Select_list_elemContext;

Select_list_elemContext.prototype.a_star = function() {
    return this.getTypedRuleContext(A_starContext,0);
};

Select_list_elemContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Select_list_elemContext.prototype.IDENTITY = function() {
    return this.getToken(tsqlParser.IDENTITY, 0);
};

Select_list_elemContext.prototype.ROWGUID = function() {
    return this.getToken(tsqlParser.ROWGUID, 0);
};

Select_list_elemContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Select_list_elemContext.prototype.column_alias = function() {
    return this.getTypedRuleContext(Column_aliasContext,0);
};

Select_list_elemContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Select_list_elemContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSelect_list_elem(this);
	}
};

Select_list_elemContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSelect_list_elem(this);
	}
};




tsqlParser.Select_list_elemContext = Select_list_elemContext;

tsqlParser.prototype.select_list_elem = function() {

    var localctx = new Select_list_elemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 214, tsqlParser.RULE_select_list_elem);
    var _la = 0; // Token type
    try {
        this.state = 2374;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,358,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2356;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 2353;
                this.table_name();
                this.state = 2354;
                this.match(tsqlParser.DOT);
            }

            this.state = 2361;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.STAR:
                this.state = 2358;
                this.a_star();
                break;
            case tsqlParser.DOLLAR:
                this.state = 2359;
                this.match(tsqlParser.DOLLAR);
                this.state = 2360;
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.IDENTITY || _la===tsqlParser.ROWGUID)) {
                this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2363;
            localctx.alias = this.column_alias();
            this.state = 2364;
            this.match(tsqlParser.EQUAL);
            this.state = 2365;
            this.expression(0);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2367;
            this.expression(0);
            this.state = 2372;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,357,this._ctx);
            if(la_===1) {
                this.state = 2369;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.AS) {
                    this.state = 2368;
                    this.match(tsqlParser.AS);
                }

                this.state = 2371;
                localctx.alias = this.column_alias();

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_sourcesContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_sources;
    return this;
}

Table_sourcesContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_sourcesContext.prototype.constructor = Table_sourcesContext;

Table_sourcesContext.prototype.table_source = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Table_sourceContext);
    } else {
        return this.getTypedRuleContext(Table_sourceContext,i);
    }
};

Table_sourcesContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_sources(this);
	}
};

Table_sourcesContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_sources(this);
	}
};




tsqlParser.Table_sourcesContext = Table_sourcesContext;

tsqlParser.prototype.table_sources = function() {

    var localctx = new Table_sourcesContext(this, this._ctx, this.state);
    this.enterRule(localctx, 216, tsqlParser.RULE_table_sources);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2376;
        this.table_source();
        this.state = 2381;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,359,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2377;
                this.match(tsqlParser.COMMA);
                this.state = 2378;
                this.table_source(); 
            }
            this.state = 2383;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,359,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_sourceContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_source;
    return this;
}

Table_sourceContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_sourceContext.prototype.constructor = Table_sourceContext;

Table_sourceContext.prototype.table_source_item_joined = function() {
    return this.getTypedRuleContext(Table_source_item_joinedContext,0);
};

Table_sourceContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_source(this);
	}
};

Table_sourceContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_source(this);
	}
};




tsqlParser.Table_sourceContext = Table_sourceContext;

tsqlParser.prototype.table_source = function() {

    var localctx = new Table_sourceContext(this, this._ctx, this.state);
    this.enterRule(localctx, 218, tsqlParser.RULE_table_source);
    try {
        this.state = 2389;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,360,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2384;
            this.table_source_item_joined();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2385;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2386;
            this.table_source_item_joined();
            this.state = 2387;
            this.match(tsqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_source_item_joinedContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_source_item_joined;
    return this;
}

Table_source_item_joinedContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_source_item_joinedContext.prototype.constructor = Table_source_item_joinedContext;

Table_source_item_joinedContext.prototype.table_source_item = function() {
    return this.getTypedRuleContext(Table_source_itemContext,0);
};

Table_source_item_joinedContext.prototype.join_part = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Join_partContext);
    } else {
        return this.getTypedRuleContext(Join_partContext,i);
    }
};

Table_source_item_joinedContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_source_item_joined(this);
	}
};

Table_source_item_joinedContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_source_item_joined(this);
	}
};




tsqlParser.Table_source_item_joinedContext = Table_source_item_joinedContext;

tsqlParser.prototype.table_source_item_joined = function() {

    var localctx = new Table_source_item_joinedContext(this, this._ctx, this.state);
    this.enterRule(localctx, 220, tsqlParser.RULE_table_source_item_joined);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2391;
        this.table_source_item();
        this.state = 2395;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,361,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2392;
                this.join_part(); 
            }
            this.state = 2397;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,361,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_source_itemContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_source_item;
    return this;
}

Table_source_itemContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_source_itemContext.prototype.constructor = Table_source_itemContext;

Table_source_itemContext.prototype.table_name_with_hint = function() {
    return this.getTypedRuleContext(Table_name_with_hintContext,0);
};

Table_source_itemContext.prototype.as_table_alias = function() {
    return this.getTypedRuleContext(As_table_aliasContext,0);
};

Table_source_itemContext.prototype.rowset_function = function() {
    return this.getTypedRuleContext(Rowset_functionContext,0);
};

Table_source_itemContext.prototype.derived_table = function() {
    return this.getTypedRuleContext(Derived_tableContext,0);
};

Table_source_itemContext.prototype.column_alias_list = function() {
    return this.getTypedRuleContext(Column_alias_listContext,0);
};

Table_source_itemContext.prototype.change_table = function() {
    return this.getTypedRuleContext(Change_tableContext,0);
};

Table_source_itemContext.prototype.function_call = function() {
    return this.getTypedRuleContext(Function_callContext,0);
};

Table_source_itemContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Table_source_itemContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_source_item(this);
	}
};

Table_source_itemContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_source_item(this);
	}
};




tsqlParser.Table_source_itemContext = Table_source_itemContext;

tsqlParser.prototype.table_source_item = function() {

    var localctx = new Table_source_itemContext(this, this._ctx, this.state);
    this.enterRule(localctx, 222, tsqlParser.RULE_table_source_item);
    try {
        this.state = 2433;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,370,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2398;
            this.table_name_with_hint();
            this.state = 2400;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,362,this._ctx);
            if(la_===1) {
                this.state = 2399;
                this.as_table_alias();

            }
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2402;
            this.rowset_function();
            this.state = 2404;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,363,this._ctx);
            if(la_===1) {
                this.state = 2403;
                this.as_table_alias();

            }
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2406;
            this.derived_table();
            this.state = 2411;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,365,this._ctx);
            if(la_===1) {
                this.state = 2407;
                this.as_table_alias();
                this.state = 2409;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,364,this._ctx);
                if(la_===1) {
                    this.state = 2408;
                    this.column_alias_list();

                }

            }
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2413;
            this.change_table();
            this.state = 2414;
            this.as_table_alias();
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 2416;
            this.function_call();
            this.state = 2418;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,366,this._ctx);
            if(la_===1) {
                this.state = 2417;
                this.as_table_alias();

            }
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 2420;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 2422;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,367,this._ctx);
            if(la_===1) {
                this.state = 2421;
                this.as_table_alias();

            }
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 2424;
            this.match(tsqlParser.LOCAL_ID);
            this.state = 2425;
            this.match(tsqlParser.DOT);
            this.state = 2426;
            this.function_call();
            this.state = 2431;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,369,this._ctx);
            if(la_===1) {
                this.state = 2427;
                this.as_table_alias();
                this.state = 2429;
                this._errHandler.sync(this);
                var la_ = this._interp.adaptivePredict(this._input,368,this._ctx);
                if(la_===1) {
                    this.state = 2428;
                    this.column_alias_list();

                }

            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Change_tableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_change_table;
    return this;
}

Change_tableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Change_tableContext.prototype.constructor = Change_tableContext;

Change_tableContext.prototype.CHANGETABLE = function() {
    return this.getToken(tsqlParser.CHANGETABLE, 0);
};

Change_tableContext.prototype.CHANGES = function() {
    return this.getToken(tsqlParser.CHANGES, 0);
};

Change_tableContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Change_tableContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Change_tableContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Change_tableContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Change_tableContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterChange_table(this);
	}
};

Change_tableContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitChange_table(this);
	}
};




tsqlParser.Change_tableContext = Change_tableContext;

tsqlParser.prototype.change_table = function() {

    var localctx = new Change_tableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 224, tsqlParser.RULE_change_table);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2435;
        this.match(tsqlParser.CHANGETABLE);
        this.state = 2436;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2437;
        this.match(tsqlParser.CHANGES);
        this.state = 2438;
        this.table_name();
        this.state = 2439;
        this.match(tsqlParser.COMMA);
        this.state = 2440;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.NULL || _la===tsqlParser.LOCAL_ID || _la===tsqlParser.DECIMAL)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 2441;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Join_partContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_join_part;
    this.join_type = null; // Token
    this.join_hint = null; // Token
    return this;
}

Join_partContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Join_partContext.prototype.constructor = Join_partContext;

Join_partContext.prototype.JOIN = function() {
    return this.getToken(tsqlParser.JOIN, 0);
};

Join_partContext.prototype.table_source = function() {
    return this.getTypedRuleContext(Table_sourceContext,0);
};

Join_partContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Join_partContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

Join_partContext.prototype.LEFT = function() {
    return this.getToken(tsqlParser.LEFT, 0);
};

Join_partContext.prototype.RIGHT = function() {
    return this.getToken(tsqlParser.RIGHT, 0);
};

Join_partContext.prototype.FULL = function() {
    return this.getToken(tsqlParser.FULL, 0);
};

Join_partContext.prototype.INNER = function() {
    return this.getToken(tsqlParser.INNER, 0);
};

Join_partContext.prototype.OUTER = function() {
    return this.getToken(tsqlParser.OUTER, 0);
};

Join_partContext.prototype.LOOP = function() {
    return this.getToken(tsqlParser.LOOP, 0);
};

Join_partContext.prototype.HASH = function() {
    return this.getToken(tsqlParser.HASH, 0);
};

Join_partContext.prototype.MERGE = function() {
    return this.getToken(tsqlParser.MERGE, 0);
};

Join_partContext.prototype.REMOTE = function() {
    return this.getToken(tsqlParser.REMOTE, 0);
};

Join_partContext.prototype.CROSS = function() {
    return this.getToken(tsqlParser.CROSS, 0);
};

Join_partContext.prototype.APPLY = function() {
    return this.getToken(tsqlParser.APPLY, 0);
};

Join_partContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterJoin_part(this);
	}
};

Join_partContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitJoin_part(this);
	}
};




tsqlParser.Join_partContext = Join_partContext;

tsqlParser.prototype.join_part = function() {

    var localctx = new Join_partContext(this, this._ctx, this.state);
    this.enterRule(localctx, 226, tsqlParser.RULE_join_part);
    var _la = 0; // Token type
    try {
        this.state = 2469;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,375,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2450;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.INNER:
            case tsqlParser.JOIN:
            case tsqlParser.MERGE:
            case tsqlParser.HASH:
            case tsqlParser.LOOP:
            case tsqlParser.REMOTE:
                this.state = 2444;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.INNER) {
                    this.state = 2443;
                    this.match(tsqlParser.INNER);
                }

                break;
            case tsqlParser.FULL:
            case tsqlParser.LEFT:
            case tsqlParser.RIGHT:
                this.state = 2446;
                localctx.join_type = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.FULL || _la===tsqlParser.LEFT || _la===tsqlParser.RIGHT)) {
                    localctx.join_type = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
                this.state = 2448;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.OUTER) {
                    this.state = 2447;
                    this.match(tsqlParser.OUTER);
                }

                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2453;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.MERGE || _la===tsqlParser.HASH || _la===tsqlParser.LOOP || _la===tsqlParser.REMOTE) {
                this.state = 2452;
                localctx.join_hint = this._input.LT(1);
                _la = this._input.LA(1);
                if(!(_la===tsqlParser.MERGE || _la===tsqlParser.HASH || _la===tsqlParser.LOOP || _la===tsqlParser.REMOTE)) {
                    localctx.join_hint = this._errHandler.recoverInline(this);
                }
                else {
                	this._errHandler.reportMatch(this);
                    this.consume();
                }
            }

            this.state = 2455;
            this.match(tsqlParser.JOIN);
            this.state = 2456;
            this.table_source();
            this.state = 2457;
            this.match(tsqlParser.ON);
            this.state = 2458;
            this.search_condition(0);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2460;
            this.match(tsqlParser.CROSS);
            this.state = 2461;
            this.match(tsqlParser.JOIN);
            this.state = 2462;
            this.table_source();
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 2463;
            this.match(tsqlParser.CROSS);
            this.state = 2464;
            this.match(tsqlParser.APPLY);
            this.state = 2465;
            this.table_source();
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 2466;
            this.match(tsqlParser.OUTER);
            this.state = 2467;
            this.match(tsqlParser.APPLY);
            this.state = 2468;
            this.table_source();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_name_with_hintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_name_with_hint;
    return this;
}

Table_name_with_hintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_name_with_hintContext.prototype.constructor = Table_name_with_hintContext;

Table_name_with_hintContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Table_name_with_hintContext.prototype.with_table_hints = function() {
    return this.getTypedRuleContext(With_table_hintsContext,0);
};

Table_name_with_hintContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_name_with_hint(this);
	}
};

Table_name_with_hintContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_name_with_hint(this);
	}
};




tsqlParser.Table_name_with_hintContext = Table_name_with_hintContext;

tsqlParser.prototype.table_name_with_hint = function() {

    var localctx = new Table_name_with_hintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 228, tsqlParser.RULE_table_name_with_hint);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2471;
        this.table_name();
        this.state = 2473;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,376,this._ctx);
        if(la_===1) {
            this.state = 2472;
            this.with_table_hints();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Rowset_functionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_rowset_function;
    this.provider_name = null; // Token
    this.connectionString = null; // Token
    this.sql = null; // Token
    this.data_file = null; // Token
    return this;
}

Rowset_functionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Rowset_functionContext.prototype.constructor = Rowset_functionContext;

Rowset_functionContext.prototype.OPENROWSET = function() {
    return this.getToken(tsqlParser.OPENROWSET, 0);
};

Rowset_functionContext.prototype.LR_BRACKET = function() {
    return this.getToken(tsqlParser.LR_BRACKET, 0);
};

Rowset_functionContext.prototype.COMMA = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.COMMA);
    } else {
        return this.getToken(tsqlParser.COMMA, i);
    }
};


Rowset_functionContext.prototype.RR_BRACKET = function() {
    return this.getToken(tsqlParser.RR_BRACKET, 0);
};

Rowset_functionContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.STRING);
    } else {
        return this.getToken(tsqlParser.STRING, i);
    }
};


Rowset_functionContext.prototype.BULK = function() {
    return this.getToken(tsqlParser.BULK, 0);
};

Rowset_functionContext.prototype.bulk_option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Bulk_optionContext);
    } else {
        return this.getTypedRuleContext(Bulk_optionContext,i);
    }
};

Rowset_functionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Rowset_functionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRowset_function(this);
	}
};

Rowset_functionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRowset_function(this);
	}
};




tsqlParser.Rowset_functionContext = Rowset_functionContext;

tsqlParser.prototype.rowset_function = function() {

    var localctx = new Rowset_functionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 230, tsqlParser.RULE_rowset_function);
    var _la = 0; // Token type
    try {
        this.state = 2501;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,379,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2475;
            this.match(tsqlParser.OPENROWSET);
            this.state = 2476;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2477;
            localctx.provider_name = this.match(tsqlParser.STRING);
            this.state = 2478;
            this.match(tsqlParser.COMMA);
            this.state = 2479;
            localctx.connectionString = this.match(tsqlParser.STRING);
            this.state = 2480;
            this.match(tsqlParser.COMMA);
            this.state = 2481;
            localctx.sql = this.match(tsqlParser.STRING);
            this.state = 2482;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2483;
            this.match(tsqlParser.OPENROWSET);
            this.state = 2484;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2485;
            this.match(tsqlParser.BULK);
            this.state = 2486;
            localctx.data_file = this.match(tsqlParser.STRING);
            this.state = 2487;
            this.match(tsqlParser.COMMA);
            this.state = 2497;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,378,this._ctx);
            switch(la_) {
            case 1:
                this.state = 2488;
                this.bulk_option();
                this.state = 2493;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===tsqlParser.COMMA) {
                    this.state = 2489;
                    this.match(tsqlParser.COMMA);
                    this.state = 2490;
                    this.bulk_option();
                    this.state = 2495;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                break;

            case 2:
                this.state = 2496;
                this.r_id();
                break;

            }
            this.state = 2499;
            this.match(tsqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Bulk_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_bulk_option;
    this.bulk_option_value = null; // Token
    return this;
}

Bulk_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Bulk_optionContext.prototype.constructor = Bulk_optionContext;

Bulk_optionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Bulk_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Bulk_optionContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Bulk_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterBulk_option(this);
	}
};

Bulk_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitBulk_option(this);
	}
};




tsqlParser.Bulk_optionContext = Bulk_optionContext;

tsqlParser.prototype.bulk_option = function() {

    var localctx = new Bulk_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 232, tsqlParser.RULE_bulk_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2503;
        this.r_id();
        this.state = 2504;
        this.match(tsqlParser.EQUAL);
        this.state = 2505;
        localctx.bulk_option_value = this._input.LT(1);
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.DECIMAL || _la===tsqlParser.STRING)) {
            localctx.bulk_option_value = this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Derived_tableContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_derived_table;
    return this;
}

Derived_tableContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Derived_tableContext.prototype.constructor = Derived_tableContext;

Derived_tableContext.prototype.subquery = function() {
    return this.getTypedRuleContext(SubqueryContext,0);
};

Derived_tableContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDerived_table(this);
	}
};

Derived_tableContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDerived_table(this);
	}
};




tsqlParser.Derived_tableContext = Derived_tableContext;

tsqlParser.prototype.derived_table = function() {

    var localctx = new Derived_tableContext(this, this._ctx, this.state);
    this.enterRule(localctx, 234, tsqlParser.RULE_derived_table);
    try {
        this.state = 2512;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,380,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2507;
            this.subquery();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2508;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2509;
            this.subquery();
            this.state = 2510;
            this.match(tsqlParser.RR_BRACKET);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Function_callContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_function_call;
    return this;
}

Function_callContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Function_callContext.prototype.constructor = Function_callContext;


 
Function_callContext.prototype.copyFrom = function(ctx) {
    antlr4.ParserRuleContext.prototype.copyFrom.call(this, ctx);
};


function Simple_callContext(parser, ctx) {
	Function_callContext.call(this, parser);
    Function_callContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Simple_callContext.prototype = Object.create(Function_callContext.prototype);
Simple_callContext.prototype.constructor = Simple_callContext;

tsqlParser.Simple_callContext = Simple_callContext;

Simple_callContext.prototype.CHECKSUM = function() {
    return this.getToken(tsqlParser.CHECKSUM, 0);
};

Simple_callContext.prototype.CURRENT_TIMESTAMP = function() {
    return this.getToken(tsqlParser.CURRENT_TIMESTAMP, 0);
};

Simple_callContext.prototype.CURRENT_USER = function() {
    return this.getToken(tsqlParser.CURRENT_USER, 0);
};

Simple_callContext.prototype.MIN_ACTIVE_ROWVERSION = function() {
    return this.getToken(tsqlParser.MIN_ACTIVE_ROWVERSION, 0);
};

Simple_callContext.prototype.SESSION_USER = function() {
    return this.getToken(tsqlParser.SESSION_USER, 0);
};

Simple_callContext.prototype.SYSTEM_USER = function() {
    return this.getToken(tsqlParser.SYSTEM_USER, 0);
};
Simple_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSimple_call(this);
	}
};

Simple_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSimple_call(this);
	}
};


function Rank_callContext(parser, ctx) {
	Function_callContext.call(this, parser);
    Function_callContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Rank_callContext.prototype = Object.create(Function_callContext.prototype);
Rank_callContext.prototype.constructor = Rank_callContext;

tsqlParser.Rank_callContext = Rank_callContext;

Rank_callContext.prototype.ranking_windowed_function = function() {
    return this.getTypedRuleContext(Ranking_windowed_functionContext,0);
};
Rank_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRank_call(this);
	}
};

Rank_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRank_call(this);
	}
};


function Cast_callContext(parser, ctx) {
	Function_callContext.call(this, parser);
    this.alias = null; // Data_typeContext;
    Function_callContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Cast_callContext.prototype = Object.create(Function_callContext.prototype);
Cast_callContext.prototype.constructor = Cast_callContext;

tsqlParser.Cast_callContext = Cast_callContext;

Cast_callContext.prototype.CAST = function() {
    return this.getToken(tsqlParser.CAST, 0);
};

Cast_callContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Cast_callContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

Cast_callContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};
Cast_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCast_call(this);
	}
};

Cast_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCast_call(this);
	}
};


function Standard_callContext(parser, ctx) {
	Function_callContext.call(this, parser);
    this.style = null; // ExpressionContext;
    this.seed = null; // Token;
    this.increment = null; // Token;
    Function_callContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Standard_callContext.prototype = Object.create(Function_callContext.prototype);
Standard_callContext.prototype.constructor = Standard_callContext;

tsqlParser.Standard_callContext = Standard_callContext;

Standard_callContext.prototype.scalar_function_name = function() {
    return this.getTypedRuleContext(Scalar_function_nameContext,0);
};

Standard_callContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Standard_callContext.prototype.BINARY_CHECKSUM = function() {
    return this.getToken(tsqlParser.BINARY_CHECKSUM, 0);
};

Standard_callContext.prototype.CONVERT = function() {
    return this.getToken(tsqlParser.CONVERT, 0);
};

Standard_callContext.prototype.data_type = function() {
    return this.getTypedRuleContext(Data_typeContext,0);
};

Standard_callContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Standard_callContext.prototype.COALESCE = function() {
    return this.getToken(tsqlParser.COALESCE, 0);
};

Standard_callContext.prototype.DATEADD = function() {
    return this.getToken(tsqlParser.DATEADD, 0);
};

Standard_callContext.prototype.ID = function() {
    return this.getToken(tsqlParser.ID, 0);
};

Standard_callContext.prototype.DATEDIFF = function() {
    return this.getToken(tsqlParser.DATEDIFF, 0);
};

Standard_callContext.prototype.DATENAME = function() {
    return this.getToken(tsqlParser.DATENAME, 0);
};

Standard_callContext.prototype.DATEPART = function() {
    return this.getToken(tsqlParser.DATEPART, 0);
};

Standard_callContext.prototype.IDENTITY = function() {
    return this.getToken(tsqlParser.IDENTITY, 0);
};

Standard_callContext.prototype.DECIMAL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.DECIMAL);
    } else {
        return this.getToken(tsqlParser.DECIMAL, i);
    }
};


Standard_callContext.prototype.NULLIF = function() {
    return this.getToken(tsqlParser.NULLIF, 0);
};
Standard_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterStandard_call(this);
	}
};

Standard_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitStandard_call(this);
	}
};


function Aggregate_callContext(parser, ctx) {
	Function_callContext.call(this, parser);
    Function_callContext.prototype.copyFrom.call(this, ctx);
    return this;
}

Aggregate_callContext.prototype = Object.create(Function_callContext.prototype);
Aggregate_callContext.prototype.constructor = Aggregate_callContext;

tsqlParser.Aggregate_callContext = Aggregate_callContext;

Aggregate_callContext.prototype.aggregate_windowed_function = function() {
    return this.getTypedRuleContext(Aggregate_windowed_functionContext,0);
};
Aggregate_callContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAggregate_call(this);
	}
};

Aggregate_callContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAggregate_call(this);
	}
};



tsqlParser.Function_callContext = Function_callContext;

tsqlParser.prototype.function_call = function() {

    var localctx = new Function_callContext(this, this._ctx, this.state);
    this.enterRule(localctx, 236, tsqlParser.RULE_function_call);
    var _la = 0; // Token type
    try {
        this.state = 2611;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,385,this._ctx);
        switch(la_) {
        case 1:
            localctx = new Rank_callContext(this, localctx);
            this.enterOuterAlt(localctx, 1);
            this.state = 2514;
            this.ranking_windowed_function();
            break;

        case 2:
            localctx = new Aggregate_callContext(this, localctx);
            this.enterOuterAlt(localctx, 2);
            this.state = 2515;
            this.aggregate_windowed_function();
            break;

        case 3:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 3);
            this.state = 2516;
            this.scalar_function_name();
            this.state = 2517;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2519;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(((((_la - 18)) & ~0x1f) == 0 && ((1 << (_la - 18)) & ((1 << (tsqlParser.CASE - 18)) | (1 << (tsqlParser.COALESCE - 18)) | (1 << (tsqlParser.CONVERT - 18)) | (1 << (tsqlParser.CURRENT_TIMESTAMP - 18)) | (1 << (tsqlParser.CURRENT_USER - 18)) | (1 << (tsqlParser.DEFAULT - 18)))) !== 0) || ((((_la - 72)) & ~0x1f) == 0 && ((1 << (_la - 72)) & ((1 << (tsqlParser.FORCESEEK - 72)) | (1 << (tsqlParser.IDENTITY - 72)) | (1 << (tsqlParser.LEFT - 72)))) !== 0) || ((((_la - 108)) & ~0x1f) == 0 && ((1 << (_la - 108)) & ((1 << (tsqlParser.NULL - 108)) | (1 << (tsqlParser.NULLIF - 108)) | (1 << (tsqlParser.OVER - 108)))) !== 0) || ((((_la - 145)) & ~0x1f) == 0 && ((1 << (_la - 145)) & ((1 << (tsqlParser.RIGHT - 145)) | (1 << (tsqlParser.SESSION_USER - 145)) | (1 << (tsqlParser.SYSTEM_USER - 145)))) !== 0) || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.BINARY_CHECKSUM - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DATEADD - 225)) | (1 << (tsqlParser.DATEDIFF - 225)) | (1 << (tsqlParser.DATENAME - 225)) | (1 << (tsqlParser.DATEPART - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MIN_ACTIVE_ROWVERSION - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.LOCAL_ID - 388)) | (1 << (tsqlParser.DECIMAL - 388)) | (1 << (tsqlParser.ID - 388)) | (1 << (tsqlParser.STRING - 388)) | (1 << (tsqlParser.BINARY - 388)) | (1 << (tsqlParser.FLOAT - 388)) | (1 << (tsqlParser.REAL - 388)))) !== 0) || ((((_la - 425)) & ~0x1f) == 0 && ((1 << (_la - 425)) & ((1 << (tsqlParser.DOLLAR - 425)) | (1 << (tsqlParser.LR_BRACKET - 425)) | (1 << (tsqlParser.PLUS - 425)) | (1 << (tsqlParser.MINUS - 425)) | (1 << (tsqlParser.BIT_NOT - 425)))) !== 0)) {
                this.state = 2518;
                this.expression_list();
            }

            this.state = 2521;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 4:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 4);
            this.state = 2523;
            this.match(tsqlParser.BINARY_CHECKSUM);
            this.state = 2524;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2525;
            this.match(tsqlParser.STAR);
            this.state = 2526;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 5:
            localctx = new Cast_callContext(this, localctx);
            this.enterOuterAlt(localctx, 5);
            this.state = 2527;
            this.match(tsqlParser.CAST);
            this.state = 2528;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2529;
            this.expression(0);
            this.state = 2530;
            this.match(tsqlParser.AS);
            this.state = 2531;
            localctx.alias = this.data_type();
            this.state = 2532;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 6:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 6);
            this.state = 2534;
            this.match(tsqlParser.CONVERT);
            this.state = 2535;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2536;
            this.data_type();
            this.state = 2537;
            this.match(tsqlParser.COMMA);
            this.state = 2538;
            this.expression(0);
            this.state = 2541;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 2539;
                this.match(tsqlParser.COMMA);
                this.state = 2540;
                localctx.style = this.expression(0);
            }

            this.state = 2543;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 7:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 7);
            this.state = 2545;
            this.match(tsqlParser.CHECKSUM);
            this.state = 2546;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2547;
            this.match(tsqlParser.STAR);
            this.state = 2548;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 8:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 8);
            this.state = 2549;
            this.match(tsqlParser.COALESCE);
            this.state = 2550;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2551;
            this.expression_list();
            this.state = 2552;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 9:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 9);
            this.state = 2554;
            this.match(tsqlParser.CURRENT_TIMESTAMP);
            break;

        case 10:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 10);
            this.state = 2555;
            this.match(tsqlParser.CURRENT_USER);
            break;

        case 11:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 11);
            this.state = 2556;
            this.match(tsqlParser.DATEADD);
            this.state = 2557;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2558;
            this.match(tsqlParser.ID);
            this.state = 2559;
            this.match(tsqlParser.COMMA);
            this.state = 2560;
            this.expression(0);
            this.state = 2561;
            this.match(tsqlParser.COMMA);
            this.state = 2562;
            this.expression(0);
            this.state = 2563;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 12:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 12);
            this.state = 2565;
            this.match(tsqlParser.DATEDIFF);
            this.state = 2566;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2567;
            this.match(tsqlParser.ID);
            this.state = 2568;
            this.match(tsqlParser.COMMA);
            this.state = 2569;
            this.expression(0);
            this.state = 2570;
            this.match(tsqlParser.COMMA);
            this.state = 2571;
            this.expression(0);
            this.state = 2572;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 13:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 13);
            this.state = 2574;
            this.match(tsqlParser.DATENAME);
            this.state = 2575;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2576;
            this.match(tsqlParser.ID);
            this.state = 2577;
            this.match(tsqlParser.COMMA);
            this.state = 2578;
            this.expression(0);
            this.state = 2579;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 14:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 14);
            this.state = 2581;
            this.match(tsqlParser.DATEPART);
            this.state = 2582;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2583;
            this.match(tsqlParser.ID);
            this.state = 2584;
            this.match(tsqlParser.COMMA);
            this.state = 2585;
            this.expression(0);
            this.state = 2586;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 15:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 15);
            this.state = 2588;
            this.match(tsqlParser.IDENTITY);
            this.state = 2589;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2590;
            this.data_type();
            this.state = 2593;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,383,this._ctx);
            if(la_===1) {
                this.state = 2591;
                this.match(tsqlParser.COMMA);
                this.state = 2592;
                localctx.seed = this.match(tsqlParser.DECIMAL);

            }
            this.state = 2597;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 2595;
                this.match(tsqlParser.COMMA);
                this.state = 2596;
                localctx.increment = this.match(tsqlParser.DECIMAL);
            }

            this.state = 2599;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 16:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 16);
            this.state = 2601;
            this.match(tsqlParser.MIN_ACTIVE_ROWVERSION);
            break;

        case 17:
            localctx = new Standard_callContext(this, localctx);
            this.enterOuterAlt(localctx, 17);
            this.state = 2602;
            this.match(tsqlParser.NULLIF);
            this.state = 2603;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2604;
            this.expression(0);
            this.state = 2605;
            this.match(tsqlParser.COMMA);
            this.state = 2606;
            this.expression(0);
            this.state = 2607;
            this.match(tsqlParser.RR_BRACKET);
            break;

        case 18:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 18);
            this.state = 2609;
            this.match(tsqlParser.SESSION_USER);
            break;

        case 19:
            localctx = new Simple_callContext(this, localctx);
            this.enterOuterAlt(localctx, 19);
            this.state = 2610;
            this.match(tsqlParser.SYSTEM_USER);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Switch_sectionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_switch_section;
    this.whenExpr = null; // ExpressionContext
    this.thenExpr = null; // ExpressionContext
    return this;
}

Switch_sectionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Switch_sectionContext.prototype.constructor = Switch_sectionContext;

Switch_sectionContext.prototype.WHEN = function() {
    return this.getToken(tsqlParser.WHEN, 0);
};

Switch_sectionContext.prototype.THEN = function() {
    return this.getToken(tsqlParser.THEN, 0);
};

Switch_sectionContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Switch_sectionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSwitch_section(this);
	}
};

Switch_sectionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSwitch_section(this);
	}
};




tsqlParser.Switch_sectionContext = Switch_sectionContext;

tsqlParser.prototype.switch_section = function() {

    var localctx = new Switch_sectionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 238, tsqlParser.RULE_switch_section);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2613;
        this.match(tsqlParser.WHEN);
        this.state = 2614;
        localctx.whenExpr = this.expression(0);
        this.state = 2615;
        this.match(tsqlParser.THEN);
        this.state = 2616;
        localctx.thenExpr = this.expression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Switch_search_condition_sectionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_switch_search_condition_section;
    this.whenExpr = null; // Search_conditionContext
    this.thenExpr = null; // ExpressionContext
    return this;
}

Switch_search_condition_sectionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Switch_search_condition_sectionContext.prototype.constructor = Switch_search_condition_sectionContext;

Switch_search_condition_sectionContext.prototype.WHEN = function() {
    return this.getToken(tsqlParser.WHEN, 0);
};

Switch_search_condition_sectionContext.prototype.THEN = function() {
    return this.getToken(tsqlParser.THEN, 0);
};

Switch_search_condition_sectionContext.prototype.search_condition = function() {
    return this.getTypedRuleContext(Search_conditionContext,0);
};

Switch_search_condition_sectionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Switch_search_condition_sectionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSwitch_search_condition_section(this);
	}
};

Switch_search_condition_sectionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSwitch_search_condition_section(this);
	}
};




tsqlParser.Switch_search_condition_sectionContext = Switch_search_condition_sectionContext;

tsqlParser.prototype.switch_search_condition_section = function() {

    var localctx = new Switch_search_condition_sectionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 240, tsqlParser.RULE_switch_search_condition_section);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2618;
        this.match(tsqlParser.WHEN);
        this.state = 2619;
        localctx.whenExpr = this.search_condition(0);
        this.state = 2620;
        this.match(tsqlParser.THEN);
        this.state = 2621;
        localctx.thenExpr = this.expression(0);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function As_table_aliasContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_as_table_alias;
    return this;
}

As_table_aliasContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
As_table_aliasContext.prototype.constructor = As_table_aliasContext;

As_table_aliasContext.prototype.table_alias = function() {
    return this.getTypedRuleContext(Table_aliasContext,0);
};

As_table_aliasContext.prototype.AS = function() {
    return this.getToken(tsqlParser.AS, 0);
};

As_table_aliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAs_table_alias(this);
	}
};

As_table_aliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAs_table_alias(this);
	}
};




tsqlParser.As_table_aliasContext = As_table_aliasContext;

tsqlParser.prototype.as_table_alias = function() {

    var localctx = new As_table_aliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 242, tsqlParser.RULE_as_table_alias);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2624;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.AS) {
            this.state = 2623;
            this.match(tsqlParser.AS);
        }

        this.state = 2626;
        this.table_alias();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_aliasContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_alias;
    return this;
}

Table_aliasContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_aliasContext.prototype.constructor = Table_aliasContext;

Table_aliasContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Table_aliasContext.prototype.with_table_hints = function() {
    return this.getTypedRuleContext(With_table_hintsContext,0);
};

Table_aliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_alias(this);
	}
};

Table_aliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_alias(this);
	}
};




tsqlParser.Table_aliasContext = Table_aliasContext;

tsqlParser.prototype.table_alias = function() {

    var localctx = new Table_aliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 244, tsqlParser.RULE_table_alias);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2628;
        this.r_id();
        this.state = 2630;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,387,this._ctx);
        if(la_===1) {
            this.state = 2629;
            this.with_table_hints();

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function With_table_hintsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_with_table_hints;
    return this;
}

With_table_hintsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
With_table_hintsContext.prototype.constructor = With_table_hintsContext;

With_table_hintsContext.prototype.table_hint = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Table_hintContext);
    } else {
        return this.getTypedRuleContext(Table_hintContext,i);
    }
};

With_table_hintsContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

With_table_hintsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWith_table_hints(this);
	}
};

With_table_hintsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWith_table_hints(this);
	}
};




tsqlParser.With_table_hintsContext = With_table_hintsContext;

tsqlParser.prototype.with_table_hints = function() {

    var localctx = new With_table_hintsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 246, tsqlParser.RULE_with_table_hints);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2633;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.WITH) {
            this.state = 2632;
            this.match(tsqlParser.WITH);
        }

        this.state = 2635;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2636;
        this.table_hint();
        this.state = 2641;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2637;
            this.match(tsqlParser.COMMA);
            this.state = 2638;
            this.table_hint();
            this.state = 2643;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2644;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Insert_with_table_hintsContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_insert_with_table_hints;
    return this;
}

Insert_with_table_hintsContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Insert_with_table_hintsContext.prototype.constructor = Insert_with_table_hintsContext;

Insert_with_table_hintsContext.prototype.WITH = function() {
    return this.getToken(tsqlParser.WITH, 0);
};

Insert_with_table_hintsContext.prototype.table_hint = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Table_hintContext);
    } else {
        return this.getTypedRuleContext(Table_hintContext,i);
    }
};

Insert_with_table_hintsContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterInsert_with_table_hints(this);
	}
};

Insert_with_table_hintsContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitInsert_with_table_hints(this);
	}
};




tsqlParser.Insert_with_table_hintsContext = Insert_with_table_hintsContext;

tsqlParser.prototype.insert_with_table_hints = function() {

    var localctx = new Insert_with_table_hintsContext(this, this._ctx, this.state);
    this.enterRule(localctx, 248, tsqlParser.RULE_insert_with_table_hints);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2646;
        this.match(tsqlParser.WITH);
        this.state = 2647;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2648;
        this.table_hint();
        this.state = 2653;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2649;
            this.match(tsqlParser.COMMA);
            this.state = 2650;
            this.table_hint();
            this.state = 2655;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2656;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_hintContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_hint;
    return this;
}

Table_hintContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_hintContext.prototype.constructor = Table_hintContext;

Table_hintContext.prototype.NOEXPAND = function() {
    return this.getToken(tsqlParser.NOEXPAND, 0);
};

Table_hintContext.prototype.INDEX = function() {
    return this.getToken(tsqlParser.INDEX, 0);
};

Table_hintContext.prototype.index_value = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Index_valueContext);
    } else {
        return this.getTypedRuleContext(Index_valueContext,i);
    }
};

Table_hintContext.prototype.FORCESEEK = function() {
    return this.getToken(tsqlParser.FORCESEEK, 0);
};

Table_hintContext.prototype.SERIALIZABLE = function() {
    return this.getToken(tsqlParser.SERIALIZABLE, 0);
};

Table_hintContext.prototype.SNAPSHOT = function() {
    return this.getToken(tsqlParser.SNAPSHOT, 0);
};

Table_hintContext.prototype.SPATIAL_WINDOW_MAX_CELLS = function() {
    return this.getToken(tsqlParser.SPATIAL_WINDOW_MAX_CELLS, 0);
};

Table_hintContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Table_hintContext.prototype.ID = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.ID);
    } else {
        return this.getToken(tsqlParser.ID, i);
    }
};


Table_hintContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_hint(this);
	}
};

Table_hintContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_hint(this);
	}
};




tsqlParser.Table_hintContext = Table_hintContext;

tsqlParser.prototype.table_hint = function() {

    var localctx = new Table_hintContext(this, this._ctx, this.state);
    this.enterRule(localctx, 250, tsqlParser.RULE_table_hint);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2659;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.NOEXPAND) {
            this.state = 2658;
            this.match(tsqlParser.NOEXPAND);
        }

        this.state = 2699;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,395,this._ctx);
        if(la_===1) {
            this.state = 2661;
            this.match(tsqlParser.INDEX);
            this.state = 2662;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2663;
            this.index_value();
            this.state = 2668;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            while(_la===tsqlParser.COMMA) {
                this.state = 2664;
                this.match(tsqlParser.COMMA);
                this.state = 2665;
                this.index_value();
                this.state = 2670;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
            }
            this.state = 2671;
            this.match(tsqlParser.RR_BRACKET);

        } else if(la_===2) {
            this.state = 2673;
            this.match(tsqlParser.INDEX);
            this.state = 2674;
            this.match(tsqlParser.EQUAL);
            this.state = 2675;
            this.index_value();

        } else if(la_===3) {
            this.state = 2676;
            this.match(tsqlParser.FORCESEEK);
            this.state = 2691;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.LR_BRACKET) {
                this.state = 2677;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 2678;
                this.index_value();
                this.state = 2679;
                this.match(tsqlParser.LR_BRACKET);
                this.state = 2680;
                this.match(tsqlParser.ID);
                this.state = 2685;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                while(_la===tsqlParser.COMMA) {
                    this.state = 2681;
                    this.match(tsqlParser.COMMA);
                    this.state = 2682;
                    this.match(tsqlParser.ID);
                    this.state = 2687;
                    this._errHandler.sync(this);
                    _la = this._input.LA(1);
                }
                this.state = 2688;
                this.match(tsqlParser.RR_BRACKET);
                this.state = 2689;
                this.match(tsqlParser.RR_BRACKET);
            }


        } else if(la_===4) {
            this.state = 2693;
            this.match(tsqlParser.SERIALIZABLE);

        } else if(la_===5) {
            this.state = 2694;
            this.match(tsqlParser.SNAPSHOT);

        } else if(la_===6) {
            this.state = 2695;
            this.match(tsqlParser.SPATIAL_WINDOW_MAX_CELLS);
            this.state = 2696;
            this.match(tsqlParser.EQUAL);
            this.state = 2697;
            this.match(tsqlParser.DECIMAL);

        } else if(la_===7) {
            this.state = 2698;
            this.match(tsqlParser.ID);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Index_valueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_index_value;
    return this;
}

Index_valueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Index_valueContext.prototype.constructor = Index_valueContext;

Index_valueContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Index_valueContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Index_valueContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterIndex_value(this);
	}
};

Index_valueContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitIndex_value(this);
	}
};




tsqlParser.Index_valueContext = Index_valueContext;

tsqlParser.prototype.index_value = function() {

    var localctx = new Index_valueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 252, tsqlParser.RULE_index_value);
    try {
        this.state = 2703;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 2701;
            this.r_id();
            break;
        case tsqlParser.DECIMAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 2702;
            this.match(tsqlParser.DECIMAL);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_alias_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_alias_list;
    return this;
}

Column_alias_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_alias_listContext.prototype.constructor = Column_alias_listContext;

Column_alias_listContext.prototype.column_alias = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Column_aliasContext);
    } else {
        return this.getTypedRuleContext(Column_aliasContext,i);
    }
};

Column_alias_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_alias_list(this);
	}
};

Column_alias_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_alias_list(this);
	}
};




tsqlParser.Column_alias_listContext = Column_alias_listContext;

tsqlParser.prototype.column_alias_list = function() {

    var localctx = new Column_alias_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 254, tsqlParser.RULE_column_alias_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2705;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2706;
        this.column_alias();
        this.state = 2711;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2707;
            this.match(tsqlParser.COMMA);
            this.state = 2708;
            this.column_alias();
            this.state = 2713;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
        this.state = 2714;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_aliasContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_alias;
    return this;
}

Column_aliasContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_aliasContext.prototype.constructor = Column_aliasContext;

Column_aliasContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Column_aliasContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Column_aliasContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_alias(this);
	}
};

Column_aliasContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_alias(this);
	}
};




tsqlParser.Column_aliasContext = Column_aliasContext;

tsqlParser.prototype.column_alias = function() {

    var localctx = new Column_aliasContext(this, this._ctx, this.state);
    this.enterRule(localctx, 256, tsqlParser.RULE_column_alias);
    try {
        this.state = 2718;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 2716;
            this.r_id();
            break;
        case tsqlParser.STRING:
            this.enterOuterAlt(localctx, 2);
            this.state = 2717;
            this.match(tsqlParser.STRING);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function A_starContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_a_star;
    return this;
}

A_starContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
A_starContext.prototype.constructor = A_starContext;


A_starContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterA_star(this);
	}
};

A_starContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitA_star(this);
	}
};




tsqlParser.A_starContext = A_starContext;

tsqlParser.prototype.a_star = function() {

    var localctx = new A_starContext(this, this._ctx, this.state);
    this.enterRule(localctx, 258, tsqlParser.RULE_a_star);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2720;
        this.match(tsqlParser.STAR);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_value_constructorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_value_constructor;
    return this;
}

Table_value_constructorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_value_constructorContext.prototype.constructor = Table_value_constructorContext;

Table_value_constructorContext.prototype.VALUES = function() {
    return this.getToken(tsqlParser.VALUES, 0);
};

Table_value_constructorContext.prototype.expression_list = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Expression_listContext);
    } else {
        return this.getTypedRuleContext(Expression_listContext,i);
    }
};

Table_value_constructorContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_value_constructor(this);
	}
};

Table_value_constructorContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_value_constructor(this);
	}
};




tsqlParser.Table_value_constructorContext = Table_value_constructorContext;

tsqlParser.prototype.table_value_constructor = function() {

    var localctx = new Table_value_constructorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 260, tsqlParser.RULE_table_value_constructor);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2722;
        this.match(tsqlParser.VALUES);
        this.state = 2723;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2724;
        this.expression_list();
        this.state = 2725;
        this.match(tsqlParser.RR_BRACKET);
        this.state = 2733;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2726;
            this.match(tsqlParser.COMMA);
            this.state = 2727;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2728;
            this.expression_list();
            this.state = 2729;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 2735;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Expression_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_expression_list;
    return this;
}

Expression_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Expression_listContext.prototype.constructor = Expression_listContext;

Expression_listContext.prototype.expression = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(ExpressionContext);
    } else {
        return this.getTypedRuleContext(ExpressionContext,i);
    }
};

Expression_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterExpression_list(this);
	}
};

Expression_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitExpression_list(this);
	}
};




tsqlParser.Expression_listContext = Expression_listContext;

tsqlParser.prototype.expression_list = function() {

    var localctx = new Expression_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 262, tsqlParser.RULE_expression_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2736;
        this.expression(0);
        this.state = 2741;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 2737;
            this.match(tsqlParser.COMMA);
            this.state = 2738;
            this.expression(0);
            this.state = 2743;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Ranking_windowed_functionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_ranking_windowed_function;
    return this;
}

Ranking_windowed_functionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Ranking_windowed_functionContext.prototype.constructor = Ranking_windowed_functionContext;

Ranking_windowed_functionContext.prototype.over_clause = function() {
    return this.getTypedRuleContext(Over_clauseContext,0);
};

Ranking_windowed_functionContext.prototype.RANK = function() {
    return this.getToken(tsqlParser.RANK, 0);
};

Ranking_windowed_functionContext.prototype.DENSE_RANK = function() {
    return this.getToken(tsqlParser.DENSE_RANK, 0);
};

Ranking_windowed_functionContext.prototype.ROW_NUMBER = function() {
    return this.getToken(tsqlParser.ROW_NUMBER, 0);
};

Ranking_windowed_functionContext.prototype.NTILE = function() {
    return this.getToken(tsqlParser.NTILE, 0);
};

Ranking_windowed_functionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Ranking_windowed_functionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRanking_windowed_function(this);
	}
};

Ranking_windowed_functionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRanking_windowed_function(this);
	}
};




tsqlParser.Ranking_windowed_functionContext = Ranking_windowed_functionContext;

tsqlParser.prototype.ranking_windowed_function = function() {

    var localctx = new Ranking_windowed_functionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 264, tsqlParser.RULE_ranking_windowed_function);
    var _la = 0; // Token type
    try {
        this.state = 2754;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.DENSE_RANK:
        case tsqlParser.RANK:
        case tsqlParser.ROW_NUMBER:
            this.enterOuterAlt(localctx, 1);
            this.state = 2744;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.DENSE_RANK || _la===tsqlParser.RANK || _la===tsqlParser.ROW_NUMBER)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2745;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2746;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 2747;
            this.over_clause();
            break;
        case tsqlParser.NTILE:
            this.enterOuterAlt(localctx, 2);
            this.state = 2748;
            this.match(tsqlParser.NTILE);
            this.state = 2749;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2750;
            this.expression(0);
            this.state = 2751;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 2752;
            this.over_clause();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Aggregate_windowed_functionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_aggregate_windowed_function;
    this.args = null; // Token
    return this;
}

Aggregate_windowed_functionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Aggregate_windowed_functionContext.prototype.constructor = Aggregate_windowed_functionContext;

Aggregate_windowed_functionContext.prototype.expression = function() {
    return this.getTypedRuleContext(ExpressionContext,0);
};

Aggregate_windowed_functionContext.prototype.AVG = function() {
    return this.getToken(tsqlParser.AVG, 0);
};

Aggregate_windowed_functionContext.prototype.MAX = function() {
    return this.getToken(tsqlParser.MAX, 0);
};

Aggregate_windowed_functionContext.prototype.MIN = function() {
    return this.getToken(tsqlParser.MIN, 0);
};

Aggregate_windowed_functionContext.prototype.SUM = function() {
    return this.getToken(tsqlParser.SUM, 0);
};

Aggregate_windowed_functionContext.prototype.STDEV = function() {
    return this.getToken(tsqlParser.STDEV, 0);
};

Aggregate_windowed_functionContext.prototype.STDEVP = function() {
    return this.getToken(tsqlParser.STDEVP, 0);
};

Aggregate_windowed_functionContext.prototype.VAR = function() {
    return this.getToken(tsqlParser.VAR, 0);
};

Aggregate_windowed_functionContext.prototype.VARP = function() {
    return this.getToken(tsqlParser.VARP, 0);
};

Aggregate_windowed_functionContext.prototype.all_distinct = function() {
    return this.getTypedRuleContext(All_distinctContext,0);
};

Aggregate_windowed_functionContext.prototype.over_clause = function() {
    return this.getTypedRuleContext(Over_clauseContext,0);
};

Aggregate_windowed_functionContext.prototype.COUNT = function() {
    return this.getToken(tsqlParser.COUNT, 0);
};

Aggregate_windowed_functionContext.prototype.COUNT_BIG = function() {
    return this.getToken(tsqlParser.COUNT_BIG, 0);
};

Aggregate_windowed_functionContext.prototype.CHECKSUM_AGG = function() {
    return this.getToken(tsqlParser.CHECKSUM_AGG, 0);
};

Aggregate_windowed_functionContext.prototype.GROUPING = function() {
    return this.getToken(tsqlParser.GROUPING, 0);
};

Aggregate_windowed_functionContext.prototype.GROUPING_ID = function() {
    return this.getToken(tsqlParser.GROUPING_ID, 0);
};

Aggregate_windowed_functionContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Aggregate_windowed_functionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAggregate_windowed_function(this);
	}
};

Aggregate_windowed_functionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAggregate_windowed_function(this);
	}
};




tsqlParser.Aggregate_windowed_functionContext = Aggregate_windowed_functionContext;

tsqlParser.prototype.aggregate_windowed_function = function() {

    var localctx = new Aggregate_windowed_functionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 266, tsqlParser.RULE_aggregate_windowed_function);
    var _la = 0; // Token type
    try {
        this.state = 2797;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.AVG:
        case tsqlParser.MAX:
        case tsqlParser.MIN:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
            this.enterOuterAlt(localctx, 1);
            this.state = 2756;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.AVG || _la===tsqlParser.MAX || _la===tsqlParser.MIN || ((((_la - 367)) & ~0x1f) == 0 && ((1 << (_la - 367)) & ((1 << (tsqlParser.STDEV - 367)) | (1 << (tsqlParser.STDEVP - 367)) | (1 << (tsqlParser.SUM - 367)) | (1 << (tsqlParser.VAR - 367)) | (1 << (tsqlParser.VARP - 367)))) !== 0))) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2757;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2759;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT) {
                this.state = 2758;
                this.all_distinct();
            }

            this.state = 2761;
            this.expression(0);
            this.state = 2762;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 2764;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,403,this._ctx);
            if(la_===1) {
                this.state = 2763;
                this.over_clause();

            }
            break;
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
            this.enterOuterAlt(localctx, 2);
            this.state = 2766;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.COUNT || _la===tsqlParser.COUNT_BIG)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 2767;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2773;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.STAR:
                this.state = 2768;
                localctx.args = this.match(tsqlParser.STAR);
                break;
            case tsqlParser.ALL:
            case tsqlParser.CASE:
            case tsqlParser.COALESCE:
            case tsqlParser.CONVERT:
            case tsqlParser.CURRENT_TIMESTAMP:
            case tsqlParser.CURRENT_USER:
            case tsqlParser.DEFAULT:
            case tsqlParser.DISTINCT:
            case tsqlParser.FORCESEEK:
            case tsqlParser.IDENTITY:
            case tsqlParser.LEFT:
            case tsqlParser.NULL:
            case tsqlParser.NULLIF:
            case tsqlParser.OVER:
            case tsqlParser.RIGHT:
            case tsqlParser.SESSION_USER:
            case tsqlParser.SYSTEM_USER:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.BINARY_CHECKSUM:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DATEADD:
            case tsqlParser.DATEDIFF:
            case tsqlParser.DATENAME:
            case tsqlParser.DATEPART:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MIN_ACTIVE_ROWVERSION:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.LOCAL_ID:
            case tsqlParser.DECIMAL:
            case tsqlParser.ID:
            case tsqlParser.STRING:
            case tsqlParser.BINARY:
            case tsqlParser.FLOAT:
            case tsqlParser.REAL:
            case tsqlParser.DOLLAR:
            case tsqlParser.LR_BRACKET:
            case tsqlParser.PLUS:
            case tsqlParser.MINUS:
            case tsqlParser.BIT_NOT:
                this.state = 2770;
                this._errHandler.sync(this);
                _la = this._input.LA(1);
                if(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT) {
                    this.state = 2769;
                    this.all_distinct();
                }

                this.state = 2772;
                this.expression(0);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2775;
            this.match(tsqlParser.RR_BRACKET);
            this.state = 2777;
            this._errHandler.sync(this);
            var la_ = this._interp.adaptivePredict(this._input,406,this._ctx);
            if(la_===1) {
                this.state = 2776;
                this.over_clause();

            }
            break;
        case tsqlParser.CHECKSUM_AGG:
            this.enterOuterAlt(localctx, 3);
            this.state = 2779;
            this.match(tsqlParser.CHECKSUM_AGG);
            this.state = 2780;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2782;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT) {
                this.state = 2781;
                this.all_distinct();
            }

            this.state = 2784;
            this.expression(0);
            this.state = 2785;
            this.match(tsqlParser.RR_BRACKET);
            break;
        case tsqlParser.GROUPING:
            this.enterOuterAlt(localctx, 4);
            this.state = 2787;
            this.match(tsqlParser.GROUPING);
            this.state = 2788;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2789;
            this.expression(0);
            this.state = 2790;
            this.match(tsqlParser.RR_BRACKET);
            break;
        case tsqlParser.GROUPING_ID:
            this.enterOuterAlt(localctx, 5);
            this.state = 2792;
            this.match(tsqlParser.GROUPING_ID);
            this.state = 2793;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 2794;
            this.expression_list();
            this.state = 2795;
            this.match(tsqlParser.RR_BRACKET);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function All_distinctContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_all_distinct;
    return this;
}

All_distinctContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
All_distinctContext.prototype.constructor = All_distinctContext;

All_distinctContext.prototype.ALL = function() {
    return this.getToken(tsqlParser.ALL, 0);
};

All_distinctContext.prototype.DISTINCT = function() {
    return this.getToken(tsqlParser.DISTINCT, 0);
};

All_distinctContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAll_distinct(this);
	}
};

All_distinctContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAll_distinct(this);
	}
};




tsqlParser.All_distinctContext = All_distinctContext;

tsqlParser.prototype.all_distinct = function() {

    var localctx = new All_distinctContext(this, this._ctx, this.state);
    this.enterRule(localctx, 268, tsqlParser.RULE_all_distinct);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2799;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.ALL || _la===tsqlParser.DISTINCT)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Over_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_over_clause;
    return this;
}

Over_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Over_clauseContext.prototype.constructor = Over_clauseContext;

Over_clauseContext.prototype.OVER = function() {
    return this.getToken(tsqlParser.OVER, 0);
};

Over_clauseContext.prototype.PARTITION = function() {
    return this.getToken(tsqlParser.PARTITION, 0);
};

Over_clauseContext.prototype.BY = function() {
    return this.getToken(tsqlParser.BY, 0);
};

Over_clauseContext.prototype.expression_list = function() {
    return this.getTypedRuleContext(Expression_listContext,0);
};

Over_clauseContext.prototype.order_by_clause = function() {
    return this.getTypedRuleContext(Order_by_clauseContext,0);
};

Over_clauseContext.prototype.row_or_range_clause = function() {
    return this.getTypedRuleContext(Row_or_range_clauseContext,0);
};

Over_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOver_clause(this);
	}
};

Over_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOver_clause(this);
	}
};




tsqlParser.Over_clauseContext = Over_clauseContext;

tsqlParser.prototype.over_clause = function() {

    var localctx = new Over_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 270, tsqlParser.RULE_over_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2801;
        this.match(tsqlParser.OVER);
        this.state = 2802;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2806;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.PARTITION) {
            this.state = 2803;
            this.match(tsqlParser.PARTITION);
            this.state = 2804;
            this.match(tsqlParser.BY);
            this.state = 2805;
            this.expression_list();
        }

        this.state = 2809;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.ORDER) {
            this.state = 2808;
            this.order_by_clause();
        }

        this.state = 2812;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.RANGE || _la===tsqlParser.ROWS) {
            this.state = 2811;
            this.row_or_range_clause();
        }

        this.state = 2814;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Row_or_range_clauseContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_row_or_range_clause;
    return this;
}

Row_or_range_clauseContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Row_or_range_clauseContext.prototype.constructor = Row_or_range_clauseContext;

Row_or_range_clauseContext.prototype.window_frame_extent = function() {
    return this.getTypedRuleContext(Window_frame_extentContext,0);
};

Row_or_range_clauseContext.prototype.ROWS = function() {
    return this.getToken(tsqlParser.ROWS, 0);
};

Row_or_range_clauseContext.prototype.RANGE = function() {
    return this.getToken(tsqlParser.RANGE, 0);
};

Row_or_range_clauseContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterRow_or_range_clause(this);
	}
};

Row_or_range_clauseContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitRow_or_range_clause(this);
	}
};




tsqlParser.Row_or_range_clauseContext = Row_or_range_clauseContext;

tsqlParser.prototype.row_or_range_clause = function() {

    var localctx = new Row_or_range_clauseContext(this, this._ctx, this.state);
    this.enterRule(localctx, 272, tsqlParser.RULE_row_or_range_clause);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2816;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.RANGE || _la===tsqlParser.ROWS)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
        this.state = 2817;
        this.window_frame_extent();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Window_frame_extentContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_window_frame_extent;
    return this;
}

Window_frame_extentContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Window_frame_extentContext.prototype.constructor = Window_frame_extentContext;

Window_frame_extentContext.prototype.window_frame_preceding = function() {
    return this.getTypedRuleContext(Window_frame_precedingContext,0);
};

Window_frame_extentContext.prototype.BETWEEN = function() {
    return this.getToken(tsqlParser.BETWEEN, 0);
};

Window_frame_extentContext.prototype.window_frame_bound = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Window_frame_boundContext);
    } else {
        return this.getTypedRuleContext(Window_frame_boundContext,i);
    }
};

Window_frame_extentContext.prototype.AND = function() {
    return this.getToken(tsqlParser.AND, 0);
};

Window_frame_extentContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWindow_frame_extent(this);
	}
};

Window_frame_extentContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWindow_frame_extent(this);
	}
};




tsqlParser.Window_frame_extentContext = Window_frame_extentContext;

tsqlParser.prototype.window_frame_extent = function() {

    var localctx = new Window_frame_extentContext(this, this._ctx, this.state);
    this.enterRule(localctx, 274, tsqlParser.RULE_window_frame_extent);
    try {
        this.state = 2825;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.CURRENT:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.DECIMAL:
            this.enterOuterAlt(localctx, 1);
            this.state = 2819;
            this.window_frame_preceding();
            break;
        case tsqlParser.BETWEEN:
            this.enterOuterAlt(localctx, 2);
            this.state = 2820;
            this.match(tsqlParser.BETWEEN);
            this.state = 2821;
            this.window_frame_bound();
            this.state = 2822;
            this.match(tsqlParser.AND);
            this.state = 2823;
            this.window_frame_bound();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Window_frame_boundContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_window_frame_bound;
    return this;
}

Window_frame_boundContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Window_frame_boundContext.prototype.constructor = Window_frame_boundContext;

Window_frame_boundContext.prototype.window_frame_preceding = function() {
    return this.getTypedRuleContext(Window_frame_precedingContext,0);
};

Window_frame_boundContext.prototype.window_frame_following = function() {
    return this.getTypedRuleContext(Window_frame_followingContext,0);
};

Window_frame_boundContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWindow_frame_bound(this);
	}
};

Window_frame_boundContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWindow_frame_bound(this);
	}
};




tsqlParser.Window_frame_boundContext = Window_frame_boundContext;

tsqlParser.prototype.window_frame_bound = function() {

    var localctx = new Window_frame_boundContext(this, this._ctx, this.state);
    this.enterRule(localctx, 276, tsqlParser.RULE_window_frame_bound);
    try {
        this.state = 2829;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,413,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 2827;
            this.window_frame_preceding();
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 2828;
            this.window_frame_following();
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Window_frame_precedingContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_window_frame_preceding;
    return this;
}

Window_frame_precedingContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Window_frame_precedingContext.prototype.constructor = Window_frame_precedingContext;

Window_frame_precedingContext.prototype.UNBOUNDED = function() {
    return this.getToken(tsqlParser.UNBOUNDED, 0);
};

Window_frame_precedingContext.prototype.PRECEDING = function() {
    return this.getToken(tsqlParser.PRECEDING, 0);
};

Window_frame_precedingContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Window_frame_precedingContext.prototype.CURRENT = function() {
    return this.getToken(tsqlParser.CURRENT, 0);
};

Window_frame_precedingContext.prototype.ROW = function() {
    return this.getToken(tsqlParser.ROW, 0);
};

Window_frame_precedingContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWindow_frame_preceding(this);
	}
};

Window_frame_precedingContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWindow_frame_preceding(this);
	}
};




tsqlParser.Window_frame_precedingContext = Window_frame_precedingContext;

tsqlParser.prototype.window_frame_preceding = function() {

    var localctx = new Window_frame_precedingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 278, tsqlParser.RULE_window_frame_preceding);
    try {
        this.state = 2837;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.UNBOUNDED:
            this.enterOuterAlt(localctx, 1);
            this.state = 2831;
            this.match(tsqlParser.UNBOUNDED);
            this.state = 2832;
            this.match(tsqlParser.PRECEDING);
            break;
        case tsqlParser.DECIMAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 2833;
            this.match(tsqlParser.DECIMAL);
            this.state = 2834;
            this.match(tsqlParser.PRECEDING);
            break;
        case tsqlParser.CURRENT:
            this.enterOuterAlt(localctx, 3);
            this.state = 2835;
            this.match(tsqlParser.CURRENT);
            this.state = 2836;
            this.match(tsqlParser.ROW);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Window_frame_followingContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_window_frame_following;
    return this;
}

Window_frame_followingContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Window_frame_followingContext.prototype.constructor = Window_frame_followingContext;

Window_frame_followingContext.prototype.UNBOUNDED = function() {
    return this.getToken(tsqlParser.UNBOUNDED, 0);
};

Window_frame_followingContext.prototype.FOLLOWING = function() {
    return this.getToken(tsqlParser.FOLLOWING, 0);
};

Window_frame_followingContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Window_frame_followingContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterWindow_frame_following(this);
	}
};

Window_frame_followingContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitWindow_frame_following(this);
	}
};




tsqlParser.Window_frame_followingContext = Window_frame_followingContext;

tsqlParser.prototype.window_frame_following = function() {

    var localctx = new Window_frame_followingContext(this, this._ctx, this.state);
    this.enterRule(localctx, 280, tsqlParser.RULE_window_frame_following);
    try {
        this.state = 2843;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.UNBOUNDED:
            this.enterOuterAlt(localctx, 1);
            this.state = 2839;
            this.match(tsqlParser.UNBOUNDED);
            this.state = 2840;
            this.match(tsqlParser.FOLLOWING);
            break;
        case tsqlParser.DECIMAL:
            this.enterOuterAlt(localctx, 2);
            this.state = 2841;
            this.match(tsqlParser.DECIMAL);
            this.state = 2842;
            this.match(tsqlParser.FOLLOWING);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Create_database_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_create_database_option;
    return this;
}

Create_database_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Create_database_optionContext.prototype.constructor = Create_database_optionContext;

Create_database_optionContext.prototype.FILESTREAM = function() {
    return this.getToken(tsqlParser.FILESTREAM, 0);
};

Create_database_optionContext.prototype.database_filestream_option = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(Database_filestream_optionContext);
    } else {
        return this.getTypedRuleContext(Database_filestream_optionContext,i);
    }
};

Create_database_optionContext.prototype.DEFAULT_LANGUAGE = function() {
    return this.getToken(tsqlParser.DEFAULT_LANGUAGE, 0);
};

Create_database_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Create_database_optionContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Create_database_optionContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Create_database_optionContext.prototype.DEFAULT_FULLTEXT_LANGUAGE = function() {
    return this.getToken(tsqlParser.DEFAULT_FULLTEXT_LANGUAGE, 0);
};

Create_database_optionContext.prototype.NESTED_TRIGGERS = function() {
    return this.getToken(tsqlParser.NESTED_TRIGGERS, 0);
};

Create_database_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Create_database_optionContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

Create_database_optionContext.prototype.TRANSFORM_NOISE_WORDS = function() {
    return this.getToken(tsqlParser.TRANSFORM_NOISE_WORDS, 0);
};

Create_database_optionContext.prototype.TWO_DIGIT_YEAR_CUTOFF = function() {
    return this.getToken(tsqlParser.TWO_DIGIT_YEAR_CUTOFF, 0);
};

Create_database_optionContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

Create_database_optionContext.prototype.DB_CHAINING = function() {
    return this.getToken(tsqlParser.DB_CHAINING, 0);
};

Create_database_optionContext.prototype.TRUSTWORTHY = function() {
    return this.getToken(tsqlParser.TRUSTWORTHY, 0);
};

Create_database_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCreate_database_option(this);
	}
};

Create_database_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCreate_database_option(this);
	}
};




tsqlParser.Create_database_optionContext = Create_database_optionContext;

tsqlParser.prototype.create_database_option = function() {

    var localctx = new Create_database_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 282, tsqlParser.RULE_create_database_option);
    var _la = 0; // Token type
    try {
        this.state = 2879;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FILESTREAM:
            this.enterOuterAlt(localctx, 1);
            this.state = 2845;
            this.match(tsqlParser.FILESTREAM);

            this.state = 2846;
            this.database_filestream_option();
            this.state = 2851;
            this._errHandler.sync(this);
            var _alt = this._interp.adaptivePredict(this._input,416,this._ctx)
            while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
                if(_alt===1) {
                    this.state = 2847;
                    this.match(tsqlParser.COMMA);
                    this.state = 2848;
                    this.database_filestream_option(); 
                }
                this.state = 2853;
                this._errHandler.sync(this);
                _alt = this._interp.adaptivePredict(this._input,416,this._ctx);
            }

            break;
        case tsqlParser.DEFAULT_LANGUAGE:
            this.enterOuterAlt(localctx, 2);
            this.state = 2854;
            this.match(tsqlParser.DEFAULT_LANGUAGE);
            this.state = 2855;
            this.match(tsqlParser.EQUAL);
            this.state = 2858;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 2856;
                this.r_id();
                break;
            case tsqlParser.STRING:
                this.state = 2857;
                this.match(tsqlParser.STRING);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.DEFAULT_FULLTEXT_LANGUAGE:
            this.enterOuterAlt(localctx, 3);
            this.state = 2860;
            this.match(tsqlParser.DEFAULT_FULLTEXT_LANGUAGE);
            this.state = 2861;
            this.match(tsqlParser.EQUAL);
            this.state = 2864;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.FORCESEEK:
            case tsqlParser.ABSOLUTE:
            case tsqlParser.APPLY:
            case tsqlParser.AUTO:
            case tsqlParser.AVG:
            case tsqlParser.BASE64:
            case tsqlParser.CALLER:
            case tsqlParser.CAST:
            case tsqlParser.CATCH:
            case tsqlParser.CHECKSUM_AGG:
            case tsqlParser.COMMITTED:
            case tsqlParser.CONCAT:
            case tsqlParser.CONTROL:
            case tsqlParser.COOKIE:
            case tsqlParser.COUNT:
            case tsqlParser.COUNT_BIG:
            case tsqlParser.DELAY:
            case tsqlParser.DELETED:
            case tsqlParser.DENSE_RANK:
            case tsqlParser.DISABLE:
            case tsqlParser.DYNAMIC:
            case tsqlParser.ENCRYPTION:
            case tsqlParser.EXPAND:
            case tsqlParser.FAST:
            case tsqlParser.FAST_FORWARD:
            case tsqlParser.FIRST:
            case tsqlParser.FOLLOWING:
            case tsqlParser.FORCE:
            case tsqlParser.FORCED:
            case tsqlParser.FORWARD_ONLY:
            case tsqlParser.FULLSCAN:
            case tsqlParser.GLOBAL:
            case tsqlParser.GO:
            case tsqlParser.GROUPING:
            case tsqlParser.GROUPING_ID:
            case tsqlParser.HASH:
            case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
            case tsqlParser.IMPERSONATE:
            case tsqlParser.INSENSITIVE:
            case tsqlParser.INSERTED:
            case tsqlParser.ISOLATION:
            case tsqlParser.KEEP:
            case tsqlParser.KEEPFIXED:
            case tsqlParser.KEYSET:
            case tsqlParser.LAST:
            case tsqlParser.LEVEL:
            case tsqlParser.LOCAL:
            case tsqlParser.LOCK_ESCALATION:
            case tsqlParser.LOGIN:
            case tsqlParser.LOOP:
            case tsqlParser.MARK:
            case tsqlParser.MAX:
            case tsqlParser.MAXDOP:
            case tsqlParser.MAXRECURSION:
            case tsqlParser.MIN:
            case tsqlParser.MODIFY:
            case tsqlParser.NAME:
            case tsqlParser.NEXT:
            case tsqlParser.NOCOUNT:
            case tsqlParser.NOEXPAND:
            case tsqlParser.NORECOMPUTE:
            case tsqlParser.NTILE:
            case tsqlParser.NUMBER:
            case tsqlParser.OFFSET:
            case tsqlParser.ONLINE:
            case tsqlParser.ONLY:
            case tsqlParser.OPTIMISTIC:
            case tsqlParser.OPTIMIZE:
            case tsqlParser.OUT:
            case tsqlParser.OUTPUT:
            case tsqlParser.OWNER:
            case tsqlParser.PARAMETERIZATION:
            case tsqlParser.PARTITION:
            case tsqlParser.PATH:
            case tsqlParser.PRECEDING:
            case tsqlParser.PRIOR:
            case tsqlParser.PRIVILEGES:
            case tsqlParser.RANGE:
            case tsqlParser.RANK:
            case tsqlParser.READONLY:
            case tsqlParser.READ_ONLY:
            case tsqlParser.RECOMPILE:
            case tsqlParser.RELATIVE:
            case tsqlParser.REMOTE:
            case tsqlParser.REPEATABLE:
            case tsqlParser.ROBUST:
            case tsqlParser.ROOT:
            case tsqlParser.ROW:
            case tsqlParser.ROWGUID:
            case tsqlParser.ROWS:
            case tsqlParser.ROW_NUMBER:
            case tsqlParser.SAMPLE:
            case tsqlParser.SCHEMABINDING:
            case tsqlParser.SCROLL:
            case tsqlParser.SCROLL_LOCKS:
            case tsqlParser.SELF:
            case tsqlParser.SERIALIZABLE:
            case tsqlParser.SIMPLE:
            case tsqlParser.SIZE:
            case tsqlParser.SNAPSHOT:
            case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
            case tsqlParser.STATIC:
            case tsqlParser.STATS_STREAM:
            case tsqlParser.STDEV:
            case tsqlParser.STDEVP:
            case tsqlParser.SUM:
            case tsqlParser.TEXTIMAGE_ON:
            case tsqlParser.THROW:
            case tsqlParser.TIES:
            case tsqlParser.TIME:
            case tsqlParser.TRY:
            case tsqlParser.TYPE:
            case tsqlParser.TYPE_WARNING:
            case tsqlParser.UNBOUNDED:
            case tsqlParser.UNCOMMITTED:
            case tsqlParser.UNKNOWN:
            case tsqlParser.USING:
            case tsqlParser.VAR:
            case tsqlParser.VARP:
            case tsqlParser.VIEWS:
            case tsqlParser.VIEW_METADATA:
            case tsqlParser.WORK:
            case tsqlParser.XML:
            case tsqlParser.XMLNAMESPACES:
            case tsqlParser.DOUBLE_QUOTE_ID:
            case tsqlParser.SQUARE_BRACKET_ID:
            case tsqlParser.ID:
                this.state = 2862;
                this.r_id();
                break;
            case tsqlParser.STRING:
                this.state = 2863;
                this.match(tsqlParser.STRING);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            break;
        case tsqlParser.NESTED_TRIGGERS:
            this.enterOuterAlt(localctx, 4);
            this.state = 2866;
            this.match(tsqlParser.NESTED_TRIGGERS);
            this.state = 2867;
            this.match(tsqlParser.EQUAL);
            this.state = 2868;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TRANSFORM_NOISE_WORDS:
            this.enterOuterAlt(localctx, 5);
            this.state = 2869;
            this.match(tsqlParser.TRANSFORM_NOISE_WORDS);
            this.state = 2870;
            this.match(tsqlParser.EQUAL);
            this.state = 2871;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TWO_DIGIT_YEAR_CUTOFF:
            this.enterOuterAlt(localctx, 6);
            this.state = 2872;
            this.match(tsqlParser.TWO_DIGIT_YEAR_CUTOFF);
            this.state = 2873;
            this.match(tsqlParser.EQUAL);
            this.state = 2874;
            this.match(tsqlParser.DECIMAL);
            break;
        case tsqlParser.DB_CHAINING:
            this.enterOuterAlt(localctx, 7);
            this.state = 2875;
            this.match(tsqlParser.DB_CHAINING);
            this.state = 2876;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.TRUSTWORTHY:
            this.enterOuterAlt(localctx, 8);
            this.state = 2877;
            this.match(tsqlParser.TRUSTWORTHY);
            this.state = 2878;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Database_filestream_optionContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_database_filestream_option;
    return this;
}

Database_filestream_optionContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Database_filestream_optionContext.prototype.constructor = Database_filestream_optionContext;

Database_filestream_optionContext.prototype.LR_BRACKET = function() {
    return this.getToken(tsqlParser.LR_BRACKET, 0);
};

Database_filestream_optionContext.prototype.RR_BRACKET = function() {
    return this.getToken(tsqlParser.RR_BRACKET, 0);
};

Database_filestream_optionContext.prototype.NON_TRANSACTED_ACCESS = function() {
    return this.getToken(tsqlParser.NON_TRANSACTED_ACCESS, 0);
};

Database_filestream_optionContext.prototype.EQUAL = function() {
    return this.getToken(tsqlParser.EQUAL, 0);
};

Database_filestream_optionContext.prototype.DIRECTORY_NAME = function() {
    return this.getToken(tsqlParser.DIRECTORY_NAME, 0);
};

Database_filestream_optionContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

Database_filestream_optionContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

Database_filestream_optionContext.prototype.READ_ONLY = function() {
    return this.getToken(tsqlParser.READ_ONLY, 0);
};

Database_filestream_optionContext.prototype.FULL = function() {
    return this.getToken(tsqlParser.FULL, 0);
};

Database_filestream_optionContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDatabase_filestream_option(this);
	}
};

Database_filestream_optionContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDatabase_filestream_option(this);
	}
};




tsqlParser.Database_filestream_optionContext = Database_filestream_optionContext;

tsqlParser.prototype.database_filestream_option = function() {

    var localctx = new Database_filestream_optionContext(this, this._ctx, this.state);
    this.enterRule(localctx, 284, tsqlParser.RULE_database_filestream_option);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2881;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2888;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.NON_TRANSACTED_ACCESS:
            this.state = 2882;
            this.match(tsqlParser.NON_TRANSACTED_ACCESS);
            this.state = 2883;
            this.match(tsqlParser.EQUAL);
            this.state = 2884;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.FULL || _la===tsqlParser.OFF || _la===tsqlParser.READ_ONLY)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;
        case tsqlParser.DIRECTORY_NAME:
            this.state = 2885;
            this.match(tsqlParser.DIRECTORY_NAME);
            this.state = 2886;
            this.match(tsqlParser.EQUAL);
            this.state = 2887;
            this.match(tsqlParser.STRING);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 2890;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Database_file_specContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_database_file_spec;
    return this;
}

Database_file_specContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Database_file_specContext.prototype.constructor = Database_file_specContext;

Database_file_specContext.prototype.file_group = function() {
    return this.getTypedRuleContext(File_groupContext,0);
};

Database_file_specContext.prototype.file_spec = function() {
    return this.getTypedRuleContext(File_specContext,0);
};

Database_file_specContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDatabase_file_spec(this);
	}
};

Database_file_specContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDatabase_file_spec(this);
	}
};




tsqlParser.Database_file_specContext = Database_file_specContext;

tsqlParser.prototype.database_file_spec = function() {

    var localctx = new Database_file_specContext(this, this._ctx, this.state);
    this.enterRule(localctx, 286, tsqlParser.RULE_database_file_spec);
    try {
        this.state = 2894;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FILEGROUP:
            this.enterOuterAlt(localctx, 1);
            this.state = 2892;
            this.file_group();
            break;
        case tsqlParser.LR_BRACKET:
            this.enterOuterAlt(localctx, 2);
            this.state = 2893;
            this.file_spec();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function File_groupContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_file_group;
    return this;
}

File_groupContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
File_groupContext.prototype.constructor = File_groupContext;

File_groupContext.prototype.FILEGROUP = function() {
    return this.getToken(tsqlParser.FILEGROUP, 0);
};

File_groupContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

File_groupContext.prototype.file_spec = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(File_specContext);
    } else {
        return this.getTypedRuleContext(File_specContext,i);
    }
};

File_groupContext.prototype.CONTAINS = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.CONTAINS);
    } else {
        return this.getToken(tsqlParser.CONTAINS, i);
    }
};


File_groupContext.prototype.FILESTREAM = function() {
    return this.getToken(tsqlParser.FILESTREAM, 0);
};

File_groupContext.prototype.DEFAULT = function() {
    return this.getToken(tsqlParser.DEFAULT, 0);
};

File_groupContext.prototype.MEMORY_OPTIMIZED_DATA = function() {
    return this.getToken(tsqlParser.MEMORY_OPTIMIZED_DATA, 0);
};

File_groupContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFile_group(this);
	}
};

File_groupContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFile_group(this);
	}
};




tsqlParser.File_groupContext = File_groupContext;

tsqlParser.prototype.file_group = function() {

    var localctx = new File_groupContext(this, this._ctx, this.state);
    this.enterRule(localctx, 288, tsqlParser.RULE_file_group);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2896;
        this.match(tsqlParser.FILEGROUP);
        this.state = 2897;
        this.r_id();
        this.state = 2900;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,422,this._ctx);
        if(la_===1) {
            this.state = 2898;
            this.match(tsqlParser.CONTAINS);
            this.state = 2899;
            this.match(tsqlParser.FILESTREAM);

        }
        this.state = 2903;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.DEFAULT) {
            this.state = 2902;
            this.match(tsqlParser.DEFAULT);
        }

        this.state = 2907;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.CONTAINS) {
            this.state = 2905;
            this.match(tsqlParser.CONTAINS);
            this.state = 2906;
            this.match(tsqlParser.MEMORY_OPTIMIZED_DATA);
        }

        this.state = 2909;
        this.file_spec();
        this.state = 2914;
        this._errHandler.sync(this);
        var _alt = this._interp.adaptivePredict(this._input,425,this._ctx)
        while(_alt!=2 && _alt!=antlr4.atn.ATN.INVALID_ALT_NUMBER) {
            if(_alt===1) {
                this.state = 2910;
                this.match(tsqlParser.COMMA);
                this.state = 2911;
                this.file_spec(); 
            }
            this.state = 2916;
            this._errHandler.sync(this);
            _alt = this._interp.adaptivePredict(this._input,425,this._ctx);
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function File_specContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_file_spec;
    this.r_file = null; // Token
    return this;
}

File_specContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
File_specContext.prototype.constructor = File_specContext;

File_specContext.prototype.LR_BRACKET = function() {
    return this.getToken(tsqlParser.LR_BRACKET, 0);
};

File_specContext.prototype.NAME = function() {
    return this.getToken(tsqlParser.NAME, 0);
};

File_specContext.prototype.EQUAL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.EQUAL);
    } else {
        return this.getToken(tsqlParser.EQUAL, i);
    }
};


File_specContext.prototype.FILENAME = function() {
    return this.getToken(tsqlParser.FILENAME, 0);
};

File_specContext.prototype.RR_BRACKET = function() {
    return this.getToken(tsqlParser.RR_BRACKET, 0);
};

File_specContext.prototype.STRING = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.STRING);
    } else {
        return this.getToken(tsqlParser.STRING, i);
    }
};


File_specContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

File_specContext.prototype.SIZE = function() {
    return this.getToken(tsqlParser.SIZE, 0);
};

File_specContext.prototype.file_size = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(File_sizeContext);
    } else {
        return this.getTypedRuleContext(File_sizeContext,i);
    }
};

File_specContext.prototype.MAXSIZE = function() {
    return this.getToken(tsqlParser.MAXSIZE, 0);
};

File_specContext.prototype.FILEGROWTH = function() {
    return this.getToken(tsqlParser.FILEGROWTH, 0);
};

File_specContext.prototype.UNLIMITED = function() {
    return this.getToken(tsqlParser.UNLIMITED, 0);
};

File_specContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFile_spec(this);
	}
};

File_specContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFile_spec(this);
	}
};




tsqlParser.File_specContext = File_specContext;

tsqlParser.prototype.file_spec = function() {

    var localctx = new File_specContext(this, this._ctx, this.state);
    this.enterRule(localctx, 290, tsqlParser.RULE_file_spec);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2917;
        this.match(tsqlParser.LR_BRACKET);
        this.state = 2918;
        this.match(tsqlParser.NAME);
        this.state = 2919;
        this.match(tsqlParser.EQUAL);
        this.state = 2922;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.state = 2920;
            this.r_id();
            break;
        case tsqlParser.STRING:
            this.state = 2921;
            this.match(tsqlParser.STRING);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
        this.state = 2925;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.COMMA) {
            this.state = 2924;
            this.match(tsqlParser.COMMA);
        }

        this.state = 2927;
        this.match(tsqlParser.FILENAME);
        this.state = 2928;
        this.match(tsqlParser.EQUAL);
        this.state = 2929;
        localctx.r_file = this.match(tsqlParser.STRING);
        this.state = 2931;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.COMMA) {
            this.state = 2930;
            this.match(tsqlParser.COMMA);
        }

        this.state = 2939;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.SIZE) {
            this.state = 2933;
            this.match(tsqlParser.SIZE);
            this.state = 2934;
            this.match(tsqlParser.EQUAL);
            this.state = 2935;
            this.file_size();
            this.state = 2937;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 2936;
                this.match(tsqlParser.COMMA);
            }

        }

        this.state = 2950;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.MAXSIZE) {
            this.state = 2941;
            this.match(tsqlParser.MAXSIZE);
            this.state = 2942;
            this.match(tsqlParser.EQUAL);
            this.state = 2945;
            this._errHandler.sync(this);
            switch(this._input.LA(1)) {
            case tsqlParser.DECIMAL:
                this.state = 2943;
                this.file_size();
                break;
            case tsqlParser.UNLIMITED:
                this.state = 2944;
                this.match(tsqlParser.UNLIMITED);
                break;
            default:
                throw new antlr4.error.NoViableAltException(this);
            }
            this.state = 2948;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 2947;
                this.match(tsqlParser.COMMA);
            }

        }

        this.state = 2958;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.FILEGROWTH) {
            this.state = 2952;
            this.match(tsqlParser.FILEGROWTH);
            this.state = 2953;
            this.match(tsqlParser.EQUAL);
            this.state = 2954;
            this.file_size();
            this.state = 2956;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 2955;
                this.match(tsqlParser.COMMA);
            }

        }

        this.state = 2960;
        this.match(tsqlParser.RR_BRACKET);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Full_table_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_full_table_name;
    this.server = null; // R_idContext
    this.database = null; // R_idContext
    this.schema = null; // R_idContext
    this.table = null; // R_idContext
    return this;
}

Full_table_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Full_table_nameContext.prototype.constructor = Full_table_nameContext;

Full_table_nameContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Full_table_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFull_table_name(this);
	}
};

Full_table_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFull_table_name(this);
	}
};




tsqlParser.Full_table_nameContext = Full_table_nameContext;

tsqlParser.prototype.full_table_name = function() {

    var localctx = new Full_table_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 292, tsqlParser.RULE_full_table_name);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2979;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,437,this._ctx);
        if(la_===1) {
            this.state = 2962;
            localctx.server = this.r_id();
            this.state = 2963;
            this.match(tsqlParser.DOT);
            this.state = 2964;
            localctx.database = this.r_id();
            this.state = 2965;
            this.match(tsqlParser.DOT);
            this.state = 2966;
            localctx.schema = this.r_id();
            this.state = 2967;
            this.match(tsqlParser.DOT);

        } else if(la_===2) {
            this.state = 2969;
            localctx.database = this.r_id();
            this.state = 2970;
            this.match(tsqlParser.DOT);
            this.state = 2972;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 2971;
                localctx.schema = this.r_id();
            }

            this.state = 2974;
            this.match(tsqlParser.DOT);

        } else if(la_===3) {
            this.state = 2976;
            localctx.schema = this.r_id();
            this.state = 2977;
            this.match(tsqlParser.DOT);

        }
        this.state = 2981;
        localctx.table = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Table_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_table_name;
    this.database = null; // R_idContext
    this.schema = null; // R_idContext
    this.table = null; // R_idContext
    return this;
}

Table_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Table_nameContext.prototype.constructor = Table_nameContext;

Table_nameContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Table_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterTable_name(this);
	}
};

Table_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitTable_name(this);
	}
};




tsqlParser.Table_nameContext = Table_nameContext;

tsqlParser.prototype.table_name = function() {

    var localctx = new Table_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 294, tsqlParser.RULE_table_name);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 2993;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,439,this._ctx);
        if(la_===1) {
            this.state = 2983;
            localctx.database = this.r_id();
            this.state = 2984;
            this.match(tsqlParser.DOT);
            this.state = 2986;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 2985;
                localctx.schema = this.r_id();
            }

            this.state = 2988;
            this.match(tsqlParser.DOT);

        } else if(la_===2) {
            this.state = 2990;
            localctx.schema = this.r_id();
            this.state = 2991;
            this.match(tsqlParser.DOT);

        }
        this.state = 2995;
        localctx.table = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Simple_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_simple_name;
    this.schema = null; // R_idContext
    this.name = null; // R_idContext
    return this;
}

Simple_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Simple_nameContext.prototype.constructor = Simple_nameContext;

Simple_nameContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Simple_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSimple_name(this);
	}
};

Simple_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSimple_name(this);
	}
};




tsqlParser.Simple_nameContext = Simple_nameContext;

tsqlParser.prototype.simple_name = function() {

    var localctx = new Simple_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 296, tsqlParser.RULE_simple_name);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3000;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,440,this._ctx);
        if(la_===1) {
            this.state = 2997;
            localctx.schema = this.r_id();
            this.state = 2998;
            this.match(tsqlParser.DOT);

        }
        this.state = 3002;
        localctx.name = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Func_proc_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_func_proc_name;
    this.database = null; // R_idContext
    this.schema = null; // R_idContext
    this.procedure = null; // R_idContext
    return this;
}

Func_proc_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Func_proc_nameContext.prototype.constructor = Func_proc_nameContext;

Func_proc_nameContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Func_proc_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFunc_proc_name(this);
	}
};

Func_proc_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFunc_proc_name(this);
	}
};




tsqlParser.Func_proc_nameContext = Func_proc_nameContext;

tsqlParser.prototype.func_proc_name = function() {

    var localctx = new Func_proc_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 298, tsqlParser.RULE_func_proc_name);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3014;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,442,this._ctx);
        if(la_===1) {
            this.state = 3004;
            localctx.database = this.r_id();
            this.state = 3005;
            this.match(tsqlParser.DOT);
            this.state = 3007;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.DOUBLE_QUOTE_ID - 388)) | (1 << (tsqlParser.SQUARE_BRACKET_ID - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0)) {
                this.state = 3006;
                localctx.schema = this.r_id();
            }

            this.state = 3009;
            this.match(tsqlParser.DOT);

        } else if(la_===2) {
            this.state = 3011;
            localctx.schema = this.r_id();
            this.state = 3012;
            this.match(tsqlParser.DOT);

        }
        this.state = 3016;
        localctx.procedure = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Ddl_objectContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_ddl_object;
    return this;
}

Ddl_objectContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Ddl_objectContext.prototype.constructor = Ddl_objectContext;

Ddl_objectContext.prototype.full_table_name = function() {
    return this.getTypedRuleContext(Full_table_nameContext,0);
};

Ddl_objectContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Ddl_objectContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDdl_object(this);
	}
};

Ddl_objectContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDdl_object(this);
	}
};




tsqlParser.Ddl_objectContext = Ddl_objectContext;

tsqlParser.prototype.ddl_object = function() {

    var localctx = new Ddl_objectContext(this, this._ctx, this.state);
    this.enterRule(localctx, 300, tsqlParser.RULE_ddl_object);
    try {
        this.state = 3020;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 3018;
            this.full_table_name();
            break;
        case tsqlParser.LOCAL_ID:
            this.enterOuterAlt(localctx, 2);
            this.state = 3019;
            this.match(tsqlParser.LOCAL_ID);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Full_column_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_full_column_name;
    this.table = null; // Table_nameContext
    this.name = null; // R_idContext
    return this;
}

Full_column_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Full_column_nameContext.prototype.constructor = Full_column_nameContext;

Full_column_nameContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Full_column_nameContext.prototype.table_name = function() {
    return this.getTypedRuleContext(Table_nameContext,0);
};

Full_column_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFull_column_name(this);
	}
};

Full_column_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFull_column_name(this);
	}
};




tsqlParser.Full_column_nameContext = Full_column_nameContext;

tsqlParser.prototype.full_column_name = function() {

    var localctx = new Full_column_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 302, tsqlParser.RULE_full_column_name);
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3025;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,444,this._ctx);
        if(la_===1) {
            this.state = 3022;
            localctx.table = this.table_name();
            this.state = 3023;
            this.match(tsqlParser.DOT);

        }
        this.state = 3027;
        localctx.name = this.r_id();
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Column_name_listContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_column_name_list;
    return this;
}

Column_name_listContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Column_name_listContext.prototype.constructor = Column_name_listContext;

Column_name_listContext.prototype.r_id = function(i) {
    if(i===undefined) {
        i = null;
    }
    if(i===null) {
        return this.getTypedRuleContexts(R_idContext);
    } else {
        return this.getTypedRuleContext(R_idContext,i);
    }
};

Column_name_listContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterColumn_name_list(this);
	}
};

Column_name_listContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitColumn_name_list(this);
	}
};




tsqlParser.Column_name_listContext = Column_name_listContext;

tsqlParser.prototype.column_name_list = function() {

    var localctx = new Column_name_listContext(this, this._ctx, this.state);
    this.enterRule(localctx, 304, tsqlParser.RULE_column_name_list);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3029;
        this.r_id();
        this.state = 3034;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        while(_la===tsqlParser.COMMA) {
            this.state = 3030;
            this.match(tsqlParser.COMMA);
            this.state = 3031;
            this.r_id();
            this.state = 3036;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Cursor_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_cursor_name;
    return this;
}

Cursor_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Cursor_nameContext.prototype.constructor = Cursor_nameContext;

Cursor_nameContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Cursor_nameContext.prototype.LOCAL_ID = function() {
    return this.getToken(tsqlParser.LOCAL_ID, 0);
};

Cursor_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterCursor_name(this);
	}
};

Cursor_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitCursor_name(this);
	}
};




tsqlParser.Cursor_nameContext = Cursor_nameContext;

tsqlParser.prototype.cursor_name = function() {

    var localctx = new Cursor_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 306, tsqlParser.RULE_cursor_name);
    try {
        this.state = 3039;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 3037;
            this.r_id();
            break;
        case tsqlParser.LOCAL_ID:
            this.enterOuterAlt(localctx, 2);
            this.state = 3038;
            this.match(tsqlParser.LOCAL_ID);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function On_offContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_on_off;
    return this;
}

On_offContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
On_offContext.prototype.constructor = On_offContext;

On_offContext.prototype.ON = function() {
    return this.getToken(tsqlParser.ON, 0);
};

On_offContext.prototype.OFF = function() {
    return this.getToken(tsqlParser.OFF, 0);
};

On_offContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterOn_off(this);
	}
};

On_offContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitOn_off(this);
	}
};




tsqlParser.On_offContext = On_offContext;

tsqlParser.prototype.on_off = function() {

    var localctx = new On_offContext(this, this._ctx, this.state);
    this.enterRule(localctx, 308, tsqlParser.RULE_on_off);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3041;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.OFF || _la===tsqlParser.ON)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function ClusteredContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_clustered;
    return this;
}

ClusteredContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ClusteredContext.prototype.constructor = ClusteredContext;

ClusteredContext.prototype.CLUSTERED = function() {
    return this.getToken(tsqlParser.CLUSTERED, 0);
};

ClusteredContext.prototype.NONCLUSTERED = function() {
    return this.getToken(tsqlParser.NONCLUSTERED, 0);
};

ClusteredContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterClustered(this);
	}
};

ClusteredContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitClustered(this);
	}
};




tsqlParser.ClusteredContext = ClusteredContext;

tsqlParser.prototype.clustered = function() {

    var localctx = new ClusteredContext(this, this._ctx, this.state);
    this.enterRule(localctx, 310, tsqlParser.RULE_clustered);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3043;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.CLUSTERED || _la===tsqlParser.NONCLUSTERED)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Null_notnullContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_null_notnull;
    return this;
}

Null_notnullContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Null_notnullContext.prototype.constructor = Null_notnullContext;

Null_notnullContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Null_notnullContext.prototype.NOT = function() {
    return this.getToken(tsqlParser.NOT, 0);
};

Null_notnullContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterNull_notnull(this);
	}
};

Null_notnullContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitNull_notnull(this);
	}
};




tsqlParser.Null_notnullContext = Null_notnullContext;

tsqlParser.prototype.null_notnull = function() {

    var localctx = new Null_notnullContext(this, this._ctx, this.state);
    this.enterRule(localctx, 312, tsqlParser.RULE_null_notnull);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3046;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(_la===tsqlParser.NOT) {
            this.state = 3045;
            this.match(tsqlParser.NOT);
        }

        this.state = 3048;
        this.match(tsqlParser.NULL);
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Scalar_function_nameContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_scalar_function_name;
    return this;
}

Scalar_function_nameContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Scalar_function_nameContext.prototype.constructor = Scalar_function_nameContext;

Scalar_function_nameContext.prototype.func_proc_name = function() {
    return this.getTypedRuleContext(Func_proc_nameContext,0);
};

Scalar_function_nameContext.prototype.RIGHT = function() {
    return this.getToken(tsqlParser.RIGHT, 0);
};

Scalar_function_nameContext.prototype.LEFT = function() {
    return this.getToken(tsqlParser.LEFT, 0);
};

Scalar_function_nameContext.prototype.BINARY_CHECKSUM = function() {
    return this.getToken(tsqlParser.BINARY_CHECKSUM, 0);
};

Scalar_function_nameContext.prototype.CHECKSUM = function() {
    return this.getToken(tsqlParser.CHECKSUM, 0);
};

Scalar_function_nameContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterScalar_function_name(this);
	}
};

Scalar_function_nameContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitScalar_function_name(this);
	}
};




tsqlParser.Scalar_function_nameContext = Scalar_function_nameContext;

tsqlParser.prototype.scalar_function_name = function() {

    var localctx = new Scalar_function_nameContext(this, this._ctx, this.state);
    this.enterRule(localctx, 314, tsqlParser.RULE_scalar_function_name);
    try {
        this.state = 3055;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.DOUBLE_QUOTE_ID:
        case tsqlParser.SQUARE_BRACKET_ID:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 3050;
            this.func_proc_name();
            break;
        case tsqlParser.RIGHT:
            this.enterOuterAlt(localctx, 2);
            this.state = 3051;
            this.match(tsqlParser.RIGHT);
            break;
        case tsqlParser.LEFT:
            this.enterOuterAlt(localctx, 3);
            this.state = 3052;
            this.match(tsqlParser.LEFT);
            break;
        case tsqlParser.BINARY_CHECKSUM:
            this.enterOuterAlt(localctx, 4);
            this.state = 3053;
            this.match(tsqlParser.BINARY_CHECKSUM);
            break;
        case tsqlParser.CHECKSUM:
            this.enterOuterAlt(localctx, 5);
            this.state = 3054;
            this.match(tsqlParser.CHECKSUM);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Data_typeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_data_type;
    return this;
}

Data_typeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Data_typeContext.prototype.constructor = Data_typeContext;

Data_typeContext.prototype.r_id = function() {
    return this.getTypedRuleContext(R_idContext,0);
};

Data_typeContext.prototype.IDENTITY = function() {
    return this.getToken(tsqlParser.IDENTITY, 0);
};

Data_typeContext.prototype.DECIMAL = function(i) {
	if(i===undefined) {
		i = null;
	}
    if(i===null) {
        return this.getTokens(tsqlParser.DECIMAL);
    } else {
        return this.getToken(tsqlParser.DECIMAL, i);
    }
};


Data_typeContext.prototype.MAX = function() {
    return this.getToken(tsqlParser.MAX, 0);
};

Data_typeContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterData_type(this);
	}
};

Data_typeContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitData_type(this);
	}
};




tsqlParser.Data_typeContext = Data_typeContext;

tsqlParser.prototype.data_type = function() {

    var localctx = new Data_typeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 316, tsqlParser.RULE_data_type);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3057;
        this.r_id();
        this.state = 3059;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,449,this._ctx);
        if(la_===1) {
            this.state = 3058;
            this.match(tsqlParser.IDENTITY);

        }
        this.state = 3068;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,451,this._ctx);
        if(la_===1) {
            this.state = 3061;
            this.match(tsqlParser.LR_BRACKET);
            this.state = 3062;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.MAX || _la===tsqlParser.DECIMAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            this.state = 3065;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.COMMA) {
                this.state = 3063;
                this.match(tsqlParser.COMMA);
                this.state = 3064;
                this.match(tsqlParser.DECIMAL);
            }

            this.state = 3067;
            this.match(tsqlParser.RR_BRACKET);

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Default_valueContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_default_value;
    return this;
}

Default_valueContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Default_valueContext.prototype.constructor = Default_valueContext;

Default_valueContext.prototype.NULL = function() {
    return this.getToken(tsqlParser.NULL, 0);
};

Default_valueContext.prototype.constant = function() {
    return this.getTypedRuleContext(ConstantContext,0);
};

Default_valueContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterDefault_value(this);
	}
};

Default_valueContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitDefault_value(this);
	}
};




tsqlParser.Default_valueContext = Default_valueContext;

tsqlParser.prototype.default_value = function() {

    var localctx = new Default_valueContext(this, this._ctx, this.state);
    this.enterRule(localctx, 318, tsqlParser.RULE_default_value);
    try {
        this.state = 3072;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.NULL:
            this.enterOuterAlt(localctx, 1);
            this.state = 3070;
            this.match(tsqlParser.NULL);
            break;
        case tsqlParser.DECIMAL:
        case tsqlParser.STRING:
        case tsqlParser.BINARY:
        case tsqlParser.FLOAT:
        case tsqlParser.REAL:
        case tsqlParser.DOLLAR:
        case tsqlParser.PLUS:
        case tsqlParser.MINUS:
            this.enterOuterAlt(localctx, 2);
            this.state = 3071;
            this.constant();
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function ConstantContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_constant;
    this.dollar = null; // Token
    return this;
}

ConstantContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
ConstantContext.prototype.constructor = ConstantContext;

ConstantContext.prototype.STRING = function() {
    return this.getToken(tsqlParser.STRING, 0);
};

ConstantContext.prototype.BINARY = function() {
    return this.getToken(tsqlParser.BINARY, 0);
};

ConstantContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

ConstantContext.prototype.sign = function() {
    return this.getTypedRuleContext(SignContext,0);
};

ConstantContext.prototype.REAL = function() {
    return this.getToken(tsqlParser.REAL, 0);
};

ConstantContext.prototype.FLOAT = function() {
    return this.getToken(tsqlParser.FLOAT, 0);
};

ConstantContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterConstant(this);
	}
};

ConstantContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitConstant(this);
	}
};




tsqlParser.ConstantContext = ConstantContext;

tsqlParser.prototype.constant = function() {

    var localctx = new ConstantContext(this, this._ctx, this.state);
    this.enterRule(localctx, 320, tsqlParser.RULE_constant);
    var _la = 0; // Token type
    try {
        this.state = 3089;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,456,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 3074;
            this.match(tsqlParser.STRING);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 3075;
            this.match(tsqlParser.BINARY);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 3077;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PLUS || _la===tsqlParser.MINUS) {
                this.state = 3076;
                this.sign();
            }

            this.state = 3079;
            this.match(tsqlParser.DECIMAL);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 3081;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PLUS || _la===tsqlParser.MINUS) {
                this.state = 3080;
                this.sign();
            }

            this.state = 3083;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.FLOAT || _la===tsqlParser.REAL)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 3085;
            this._errHandler.sync(this);
            _la = this._input.LA(1);
            if(_la===tsqlParser.PLUS || _la===tsqlParser.MINUS) {
                this.state = 3084;
                this.sign();
            }

            this.state = 3087;
            localctx.dollar = this.match(tsqlParser.DOLLAR);
            this.state = 3088;
            _la = this._input.LA(1);
            if(!(_la===tsqlParser.DECIMAL || _la===tsqlParser.FLOAT)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function SignContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_sign;
    return this;
}

SignContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
SignContext.prototype.constructor = SignContext;


SignContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSign(this);
	}
};

SignContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSign(this);
	}
};




tsqlParser.SignContext = SignContext;

tsqlParser.prototype.sign = function() {

    var localctx = new SignContext(this, this._ctx, this.state);
    this.enterRule(localctx, 322, tsqlParser.RULE_sign);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3091;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.PLUS || _la===tsqlParser.MINUS)) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function R_idContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_r_id;
    return this;
}

R_idContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
R_idContext.prototype.constructor = R_idContext;

R_idContext.prototype.simple_id = function() {
    return this.getTypedRuleContext(Simple_idContext,0);
};

R_idContext.prototype.DOUBLE_QUOTE_ID = function() {
    return this.getToken(tsqlParser.DOUBLE_QUOTE_ID, 0);
};

R_idContext.prototype.SQUARE_BRACKET_ID = function() {
    return this.getToken(tsqlParser.SQUARE_BRACKET_ID, 0);
};

R_idContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterR_id(this);
	}
};

R_idContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitR_id(this);
	}
};




tsqlParser.R_idContext = R_idContext;

tsqlParser.prototype.r_id = function() {

    var localctx = new R_idContext(this, this._ctx, this.state);
    this.enterRule(localctx, 324, tsqlParser.RULE_r_id);
    try {
        this.state = 3096;
        this._errHandler.sync(this);
        switch(this._input.LA(1)) {
        case tsqlParser.FORCESEEK:
        case tsqlParser.ABSOLUTE:
        case tsqlParser.APPLY:
        case tsqlParser.AUTO:
        case tsqlParser.AVG:
        case tsqlParser.BASE64:
        case tsqlParser.CALLER:
        case tsqlParser.CAST:
        case tsqlParser.CATCH:
        case tsqlParser.CHECKSUM_AGG:
        case tsqlParser.COMMITTED:
        case tsqlParser.CONCAT:
        case tsqlParser.CONTROL:
        case tsqlParser.COOKIE:
        case tsqlParser.COUNT:
        case tsqlParser.COUNT_BIG:
        case tsqlParser.DELAY:
        case tsqlParser.DELETED:
        case tsqlParser.DENSE_RANK:
        case tsqlParser.DISABLE:
        case tsqlParser.DYNAMIC:
        case tsqlParser.ENCRYPTION:
        case tsqlParser.EXPAND:
        case tsqlParser.FAST:
        case tsqlParser.FAST_FORWARD:
        case tsqlParser.FIRST:
        case tsqlParser.FOLLOWING:
        case tsqlParser.FORCE:
        case tsqlParser.FORCED:
        case tsqlParser.FORWARD_ONLY:
        case tsqlParser.FULLSCAN:
        case tsqlParser.GLOBAL:
        case tsqlParser.GO:
        case tsqlParser.GROUPING:
        case tsqlParser.GROUPING_ID:
        case tsqlParser.HASH:
        case tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX:
        case tsqlParser.IMPERSONATE:
        case tsqlParser.INSENSITIVE:
        case tsqlParser.INSERTED:
        case tsqlParser.ISOLATION:
        case tsqlParser.KEEP:
        case tsqlParser.KEEPFIXED:
        case tsqlParser.KEYSET:
        case tsqlParser.LAST:
        case tsqlParser.LEVEL:
        case tsqlParser.LOCAL:
        case tsqlParser.LOCK_ESCALATION:
        case tsqlParser.LOGIN:
        case tsqlParser.LOOP:
        case tsqlParser.MARK:
        case tsqlParser.MAX:
        case tsqlParser.MAXDOP:
        case tsqlParser.MAXRECURSION:
        case tsqlParser.MIN:
        case tsqlParser.MODIFY:
        case tsqlParser.NAME:
        case tsqlParser.NEXT:
        case tsqlParser.NOCOUNT:
        case tsqlParser.NOEXPAND:
        case tsqlParser.NORECOMPUTE:
        case tsqlParser.NTILE:
        case tsqlParser.NUMBER:
        case tsqlParser.OFFSET:
        case tsqlParser.ONLINE:
        case tsqlParser.ONLY:
        case tsqlParser.OPTIMISTIC:
        case tsqlParser.OPTIMIZE:
        case tsqlParser.OUT:
        case tsqlParser.OUTPUT:
        case tsqlParser.OWNER:
        case tsqlParser.PARAMETERIZATION:
        case tsqlParser.PARTITION:
        case tsqlParser.PATH:
        case tsqlParser.PRECEDING:
        case tsqlParser.PRIOR:
        case tsqlParser.PRIVILEGES:
        case tsqlParser.RANGE:
        case tsqlParser.RANK:
        case tsqlParser.READONLY:
        case tsqlParser.READ_ONLY:
        case tsqlParser.RECOMPILE:
        case tsqlParser.RELATIVE:
        case tsqlParser.REMOTE:
        case tsqlParser.REPEATABLE:
        case tsqlParser.ROBUST:
        case tsqlParser.ROOT:
        case tsqlParser.ROW:
        case tsqlParser.ROWGUID:
        case tsqlParser.ROWS:
        case tsqlParser.ROW_NUMBER:
        case tsqlParser.SAMPLE:
        case tsqlParser.SCHEMABINDING:
        case tsqlParser.SCROLL:
        case tsqlParser.SCROLL_LOCKS:
        case tsqlParser.SELF:
        case tsqlParser.SERIALIZABLE:
        case tsqlParser.SIMPLE:
        case tsqlParser.SIZE:
        case tsqlParser.SNAPSHOT:
        case tsqlParser.SPATIAL_WINDOW_MAX_CELLS:
        case tsqlParser.STATIC:
        case tsqlParser.STATS_STREAM:
        case tsqlParser.STDEV:
        case tsqlParser.STDEVP:
        case tsqlParser.SUM:
        case tsqlParser.TEXTIMAGE_ON:
        case tsqlParser.THROW:
        case tsqlParser.TIES:
        case tsqlParser.TIME:
        case tsqlParser.TRY:
        case tsqlParser.TYPE:
        case tsqlParser.TYPE_WARNING:
        case tsqlParser.UNBOUNDED:
        case tsqlParser.UNCOMMITTED:
        case tsqlParser.UNKNOWN:
        case tsqlParser.USING:
        case tsqlParser.VAR:
        case tsqlParser.VARP:
        case tsqlParser.VIEWS:
        case tsqlParser.VIEW_METADATA:
        case tsqlParser.WORK:
        case tsqlParser.XML:
        case tsqlParser.XMLNAMESPACES:
        case tsqlParser.ID:
            this.enterOuterAlt(localctx, 1);
            this.state = 3093;
            this.simple_id();
            break;
        case tsqlParser.DOUBLE_QUOTE_ID:
            this.enterOuterAlt(localctx, 2);
            this.state = 3094;
            this.match(tsqlParser.DOUBLE_QUOTE_ID);
            break;
        case tsqlParser.SQUARE_BRACKET_ID:
            this.enterOuterAlt(localctx, 3);
            this.state = 3095;
            this.match(tsqlParser.SQUARE_BRACKET_ID);
            break;
        default:
            throw new antlr4.error.NoViableAltException(this);
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Simple_idContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_simple_id;
    return this;
}

Simple_idContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Simple_idContext.prototype.constructor = Simple_idContext;

Simple_idContext.prototype.ID = function() {
    return this.getToken(tsqlParser.ID, 0);
};

Simple_idContext.prototype.ABSOLUTE = function() {
    return this.getToken(tsqlParser.ABSOLUTE, 0);
};

Simple_idContext.prototype.APPLY = function() {
    return this.getToken(tsqlParser.APPLY, 0);
};

Simple_idContext.prototype.AUTO = function() {
    return this.getToken(tsqlParser.AUTO, 0);
};

Simple_idContext.prototype.AVG = function() {
    return this.getToken(tsqlParser.AVG, 0);
};

Simple_idContext.prototype.BASE64 = function() {
    return this.getToken(tsqlParser.BASE64, 0);
};

Simple_idContext.prototype.CALLER = function() {
    return this.getToken(tsqlParser.CALLER, 0);
};

Simple_idContext.prototype.CAST = function() {
    return this.getToken(tsqlParser.CAST, 0);
};

Simple_idContext.prototype.CATCH = function() {
    return this.getToken(tsqlParser.CATCH, 0);
};

Simple_idContext.prototype.CHECKSUM_AGG = function() {
    return this.getToken(tsqlParser.CHECKSUM_AGG, 0);
};

Simple_idContext.prototype.COMMITTED = function() {
    return this.getToken(tsqlParser.COMMITTED, 0);
};

Simple_idContext.prototype.CONCAT = function() {
    return this.getToken(tsqlParser.CONCAT, 0);
};

Simple_idContext.prototype.CONTROL = function() {
    return this.getToken(tsqlParser.CONTROL, 0);
};

Simple_idContext.prototype.COOKIE = function() {
    return this.getToken(tsqlParser.COOKIE, 0);
};

Simple_idContext.prototype.COUNT = function() {
    return this.getToken(tsqlParser.COUNT, 0);
};

Simple_idContext.prototype.COUNT_BIG = function() {
    return this.getToken(tsqlParser.COUNT_BIG, 0);
};

Simple_idContext.prototype.DELAY = function() {
    return this.getToken(tsqlParser.DELAY, 0);
};

Simple_idContext.prototype.DELETED = function() {
    return this.getToken(tsqlParser.DELETED, 0);
};

Simple_idContext.prototype.DENSE_RANK = function() {
    return this.getToken(tsqlParser.DENSE_RANK, 0);
};

Simple_idContext.prototype.DISABLE = function() {
    return this.getToken(tsqlParser.DISABLE, 0);
};

Simple_idContext.prototype.DYNAMIC = function() {
    return this.getToken(tsqlParser.DYNAMIC, 0);
};

Simple_idContext.prototype.ENCRYPTION = function() {
    return this.getToken(tsqlParser.ENCRYPTION, 0);
};

Simple_idContext.prototype.EXPAND = function() {
    return this.getToken(tsqlParser.EXPAND, 0);
};

Simple_idContext.prototype.FAST = function() {
    return this.getToken(tsqlParser.FAST, 0);
};

Simple_idContext.prototype.FAST_FORWARD = function() {
    return this.getToken(tsqlParser.FAST_FORWARD, 0);
};

Simple_idContext.prototype.FIRST = function() {
    return this.getToken(tsqlParser.FIRST, 0);
};

Simple_idContext.prototype.FOLLOWING = function() {
    return this.getToken(tsqlParser.FOLLOWING, 0);
};

Simple_idContext.prototype.FORCE = function() {
    return this.getToken(tsqlParser.FORCE, 0);
};

Simple_idContext.prototype.FORCESEEK = function() {
    return this.getToken(tsqlParser.FORCESEEK, 0);
};

Simple_idContext.prototype.FORWARD_ONLY = function() {
    return this.getToken(tsqlParser.FORWARD_ONLY, 0);
};

Simple_idContext.prototype.FULLSCAN = function() {
    return this.getToken(tsqlParser.FULLSCAN, 0);
};

Simple_idContext.prototype.GLOBAL = function() {
    return this.getToken(tsqlParser.GLOBAL, 0);
};

Simple_idContext.prototype.GO = function() {
    return this.getToken(tsqlParser.GO, 0);
};

Simple_idContext.prototype.GROUPING = function() {
    return this.getToken(tsqlParser.GROUPING, 0);
};

Simple_idContext.prototype.GROUPING_ID = function() {
    return this.getToken(tsqlParser.GROUPING_ID, 0);
};

Simple_idContext.prototype.HASH = function() {
    return this.getToken(tsqlParser.HASH, 0);
};

Simple_idContext.prototype.IMPERSONATE = function() {
    return this.getToken(tsqlParser.IMPERSONATE, 0);
};

Simple_idContext.prototype.INSENSITIVE = function() {
    return this.getToken(tsqlParser.INSENSITIVE, 0);
};

Simple_idContext.prototype.INSERTED = function() {
    return this.getToken(tsqlParser.INSERTED, 0);
};

Simple_idContext.prototype.ISOLATION = function() {
    return this.getToken(tsqlParser.ISOLATION, 0);
};

Simple_idContext.prototype.KEEP = function() {
    return this.getToken(tsqlParser.KEEP, 0);
};

Simple_idContext.prototype.KEEPFIXED = function() {
    return this.getToken(tsqlParser.KEEPFIXED, 0);
};

Simple_idContext.prototype.FORCED = function() {
    return this.getToken(tsqlParser.FORCED, 0);
};

Simple_idContext.prototype.KEYSET = function() {
    return this.getToken(tsqlParser.KEYSET, 0);
};

Simple_idContext.prototype.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX = function() {
    return this.getToken(tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX, 0);
};

Simple_idContext.prototype.LAST = function() {
    return this.getToken(tsqlParser.LAST, 0);
};

Simple_idContext.prototype.LEVEL = function() {
    return this.getToken(tsqlParser.LEVEL, 0);
};

Simple_idContext.prototype.LOCAL = function() {
    return this.getToken(tsqlParser.LOCAL, 0);
};

Simple_idContext.prototype.LOCK_ESCALATION = function() {
    return this.getToken(tsqlParser.LOCK_ESCALATION, 0);
};

Simple_idContext.prototype.LOGIN = function() {
    return this.getToken(tsqlParser.LOGIN, 0);
};

Simple_idContext.prototype.LOOP = function() {
    return this.getToken(tsqlParser.LOOP, 0);
};

Simple_idContext.prototype.MARK = function() {
    return this.getToken(tsqlParser.MARK, 0);
};

Simple_idContext.prototype.MAX = function() {
    return this.getToken(tsqlParser.MAX, 0);
};

Simple_idContext.prototype.MAXDOP = function() {
    return this.getToken(tsqlParser.MAXDOP, 0);
};

Simple_idContext.prototype.MAXRECURSION = function() {
    return this.getToken(tsqlParser.MAXRECURSION, 0);
};

Simple_idContext.prototype.MIN = function() {
    return this.getToken(tsqlParser.MIN, 0);
};

Simple_idContext.prototype.MODIFY = function() {
    return this.getToken(tsqlParser.MODIFY, 0);
};

Simple_idContext.prototype.NAME = function() {
    return this.getToken(tsqlParser.NAME, 0);
};

Simple_idContext.prototype.NEXT = function() {
    return this.getToken(tsqlParser.NEXT, 0);
};

Simple_idContext.prototype.NOCOUNT = function() {
    return this.getToken(tsqlParser.NOCOUNT, 0);
};

Simple_idContext.prototype.NOEXPAND = function() {
    return this.getToken(tsqlParser.NOEXPAND, 0);
};

Simple_idContext.prototype.NORECOMPUTE = function() {
    return this.getToken(tsqlParser.NORECOMPUTE, 0);
};

Simple_idContext.prototype.NTILE = function() {
    return this.getToken(tsqlParser.NTILE, 0);
};

Simple_idContext.prototype.NUMBER = function() {
    return this.getToken(tsqlParser.NUMBER, 0);
};

Simple_idContext.prototype.OFFSET = function() {
    return this.getToken(tsqlParser.OFFSET, 0);
};

Simple_idContext.prototype.ONLINE = function() {
    return this.getToken(tsqlParser.ONLINE, 0);
};

Simple_idContext.prototype.ONLY = function() {
    return this.getToken(tsqlParser.ONLY, 0);
};

Simple_idContext.prototype.OPTIMISTIC = function() {
    return this.getToken(tsqlParser.OPTIMISTIC, 0);
};

Simple_idContext.prototype.OPTIMIZE = function() {
    return this.getToken(tsqlParser.OPTIMIZE, 0);
};

Simple_idContext.prototype.OUT = function() {
    return this.getToken(tsqlParser.OUT, 0);
};

Simple_idContext.prototype.OUTPUT = function() {
    return this.getToken(tsqlParser.OUTPUT, 0);
};

Simple_idContext.prototype.OWNER = function() {
    return this.getToken(tsqlParser.OWNER, 0);
};

Simple_idContext.prototype.PARAMETERIZATION = function() {
    return this.getToken(tsqlParser.PARAMETERIZATION, 0);
};

Simple_idContext.prototype.PARTITION = function() {
    return this.getToken(tsqlParser.PARTITION, 0);
};

Simple_idContext.prototype.PATH = function() {
    return this.getToken(tsqlParser.PATH, 0);
};

Simple_idContext.prototype.PRECEDING = function() {
    return this.getToken(tsqlParser.PRECEDING, 0);
};

Simple_idContext.prototype.PRIOR = function() {
    return this.getToken(tsqlParser.PRIOR, 0);
};

Simple_idContext.prototype.PRIVILEGES = function() {
    return this.getToken(tsqlParser.PRIVILEGES, 0);
};

Simple_idContext.prototype.RANGE = function() {
    return this.getToken(tsqlParser.RANGE, 0);
};

Simple_idContext.prototype.RANK = function() {
    return this.getToken(tsqlParser.RANK, 0);
};

Simple_idContext.prototype.READONLY = function() {
    return this.getToken(tsqlParser.READONLY, 0);
};

Simple_idContext.prototype.READ_ONLY = function() {
    return this.getToken(tsqlParser.READ_ONLY, 0);
};

Simple_idContext.prototype.RECOMPILE = function() {
    return this.getToken(tsqlParser.RECOMPILE, 0);
};

Simple_idContext.prototype.RELATIVE = function() {
    return this.getToken(tsqlParser.RELATIVE, 0);
};

Simple_idContext.prototype.REMOTE = function() {
    return this.getToken(tsqlParser.REMOTE, 0);
};

Simple_idContext.prototype.REPEATABLE = function() {
    return this.getToken(tsqlParser.REPEATABLE, 0);
};

Simple_idContext.prototype.ROBUST = function() {
    return this.getToken(tsqlParser.ROBUST, 0);
};

Simple_idContext.prototype.ROOT = function() {
    return this.getToken(tsqlParser.ROOT, 0);
};

Simple_idContext.prototype.ROW = function() {
    return this.getToken(tsqlParser.ROW, 0);
};

Simple_idContext.prototype.ROWGUID = function() {
    return this.getToken(tsqlParser.ROWGUID, 0);
};

Simple_idContext.prototype.ROWS = function() {
    return this.getToken(tsqlParser.ROWS, 0);
};

Simple_idContext.prototype.ROW_NUMBER = function() {
    return this.getToken(tsqlParser.ROW_NUMBER, 0);
};

Simple_idContext.prototype.SAMPLE = function() {
    return this.getToken(tsqlParser.SAMPLE, 0);
};

Simple_idContext.prototype.SCHEMABINDING = function() {
    return this.getToken(tsqlParser.SCHEMABINDING, 0);
};

Simple_idContext.prototype.SCROLL = function() {
    return this.getToken(tsqlParser.SCROLL, 0);
};

Simple_idContext.prototype.SCROLL_LOCKS = function() {
    return this.getToken(tsqlParser.SCROLL_LOCKS, 0);
};

Simple_idContext.prototype.SELF = function() {
    return this.getToken(tsqlParser.SELF, 0);
};

Simple_idContext.prototype.SERIALIZABLE = function() {
    return this.getToken(tsqlParser.SERIALIZABLE, 0);
};

Simple_idContext.prototype.SIMPLE = function() {
    return this.getToken(tsqlParser.SIMPLE, 0);
};

Simple_idContext.prototype.SIZE = function() {
    return this.getToken(tsqlParser.SIZE, 0);
};

Simple_idContext.prototype.SNAPSHOT = function() {
    return this.getToken(tsqlParser.SNAPSHOT, 0);
};

Simple_idContext.prototype.SPATIAL_WINDOW_MAX_CELLS = function() {
    return this.getToken(tsqlParser.SPATIAL_WINDOW_MAX_CELLS, 0);
};

Simple_idContext.prototype.STATIC = function() {
    return this.getToken(tsqlParser.STATIC, 0);
};

Simple_idContext.prototype.STATS_STREAM = function() {
    return this.getToken(tsqlParser.STATS_STREAM, 0);
};

Simple_idContext.prototype.STDEV = function() {
    return this.getToken(tsqlParser.STDEV, 0);
};

Simple_idContext.prototype.STDEVP = function() {
    return this.getToken(tsqlParser.STDEVP, 0);
};

Simple_idContext.prototype.SUM = function() {
    return this.getToken(tsqlParser.SUM, 0);
};

Simple_idContext.prototype.TEXTIMAGE_ON = function() {
    return this.getToken(tsqlParser.TEXTIMAGE_ON, 0);
};

Simple_idContext.prototype.THROW = function() {
    return this.getToken(tsqlParser.THROW, 0);
};

Simple_idContext.prototype.TIES = function() {
    return this.getToken(tsqlParser.TIES, 0);
};

Simple_idContext.prototype.TIME = function() {
    return this.getToken(tsqlParser.TIME, 0);
};

Simple_idContext.prototype.TRY = function() {
    return this.getToken(tsqlParser.TRY, 0);
};

Simple_idContext.prototype.TYPE = function() {
    return this.getToken(tsqlParser.TYPE, 0);
};

Simple_idContext.prototype.TYPE_WARNING = function() {
    return this.getToken(tsqlParser.TYPE_WARNING, 0);
};

Simple_idContext.prototype.UNBOUNDED = function() {
    return this.getToken(tsqlParser.UNBOUNDED, 0);
};

Simple_idContext.prototype.UNCOMMITTED = function() {
    return this.getToken(tsqlParser.UNCOMMITTED, 0);
};

Simple_idContext.prototype.UNKNOWN = function() {
    return this.getToken(tsqlParser.UNKNOWN, 0);
};

Simple_idContext.prototype.USING = function() {
    return this.getToken(tsqlParser.USING, 0);
};

Simple_idContext.prototype.VAR = function() {
    return this.getToken(tsqlParser.VAR, 0);
};

Simple_idContext.prototype.VARP = function() {
    return this.getToken(tsqlParser.VARP, 0);
};

Simple_idContext.prototype.VIEW_METADATA = function() {
    return this.getToken(tsqlParser.VIEW_METADATA, 0);
};

Simple_idContext.prototype.VIEWS = function() {
    return this.getToken(tsqlParser.VIEWS, 0);
};

Simple_idContext.prototype.WORK = function() {
    return this.getToken(tsqlParser.WORK, 0);
};

Simple_idContext.prototype.XML = function() {
    return this.getToken(tsqlParser.XML, 0);
};

Simple_idContext.prototype.XMLNAMESPACES = function() {
    return this.getToken(tsqlParser.XMLNAMESPACES, 0);
};

Simple_idContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterSimple_id(this);
	}
};

Simple_idContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitSimple_id(this);
	}
};




tsqlParser.Simple_idContext = Simple_idContext;

tsqlParser.prototype.simple_id = function() {

    var localctx = new Simple_idContext(this, this._ctx, this.state);
    this.enterRule(localctx, 326, tsqlParser.RULE_simple_id);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3098;
        _la = this._input.LA(1);
        if(!(_la===tsqlParser.FORCESEEK || ((((_la - 193)) & ~0x1f) == 0 && ((1 << (_la - 193)) & ((1 << (tsqlParser.ABSOLUTE - 193)) | (1 << (tsqlParser.APPLY - 193)) | (1 << (tsqlParser.AUTO - 193)) | (1 << (tsqlParser.AVG - 193)) | (1 << (tsqlParser.BASE64 - 193)) | (1 << (tsqlParser.CALLER - 193)) | (1 << (tsqlParser.CAST - 193)) | (1 << (tsqlParser.CATCH - 193)) | (1 << (tsqlParser.CHECKSUM_AGG - 193)) | (1 << (tsqlParser.COMMITTED - 193)) | (1 << (tsqlParser.CONCAT - 193)))) !== 0) || ((((_la - 225)) & ~0x1f) == 0 && ((1 << (_la - 225)) & ((1 << (tsqlParser.CONTROL - 225)) | (1 << (tsqlParser.COOKIE - 225)) | (1 << (tsqlParser.COUNT - 225)) | (1 << (tsqlParser.COUNT_BIG - 225)) | (1 << (tsqlParser.DELAY - 225)) | (1 << (tsqlParser.DELETED - 225)) | (1 << (tsqlParser.DENSE_RANK - 225)) | (1 << (tsqlParser.DISABLE - 225)) | (1 << (tsqlParser.DYNAMIC - 225)) | (1 << (tsqlParser.ENCRYPTION - 225)) | (1 << (tsqlParser.EXPAND - 225)) | (1 << (tsqlParser.FAST - 225)) | (1 << (tsqlParser.FAST_FORWARD - 225)))) !== 0) || ((((_la - 259)) & ~0x1f) == 0 && ((1 << (_la - 259)) & ((1 << (tsqlParser.FIRST - 259)) | (1 << (tsqlParser.FOLLOWING - 259)) | (1 << (tsqlParser.FORCE - 259)) | (1 << (tsqlParser.FORCED - 259)) | (1 << (tsqlParser.FORWARD_ONLY - 259)) | (1 << (tsqlParser.FULLSCAN - 259)) | (1 << (tsqlParser.GLOBAL - 259)) | (1 << (tsqlParser.GO - 259)) | (1 << (tsqlParser.GROUPING - 259)) | (1 << (tsqlParser.GROUPING_ID - 259)) | (1 << (tsqlParser.HASH - 259)) | (1 << (tsqlParser.IGNORE_NONCLUSTERED_COLUMNSTORE_INDEX - 259)) | (1 << (tsqlParser.IMPERSONATE - 259)) | (1 << (tsqlParser.INSENSITIVE - 259)) | (1 << (tsqlParser.INSERTED - 259)) | (1 << (tsqlParser.ISOLATION - 259)) | (1 << (tsqlParser.KEEP - 259)) | (1 << (tsqlParser.KEEPFIXED - 259)) | (1 << (tsqlParser.KEYSET - 259)) | (1 << (tsqlParser.LAST - 259)) | (1 << (tsqlParser.LEVEL - 259)) | (1 << (tsqlParser.LOCAL - 259)) | (1 << (tsqlParser.LOCK_ESCALATION - 259)) | (1 << (tsqlParser.LOGIN - 259)) | (1 << (tsqlParser.LOOP - 259)))) !== 0) || ((((_la - 291)) & ~0x1f) == 0 && ((1 << (_la - 291)) & ((1 << (tsqlParser.MARK - 291)) | (1 << (tsqlParser.MAX - 291)) | (1 << (tsqlParser.MAXDOP - 291)) | (1 << (tsqlParser.MAXRECURSION - 291)) | (1 << (tsqlParser.MIN - 291)) | (1 << (tsqlParser.MODIFY - 291)) | (1 << (tsqlParser.NAME - 291)) | (1 << (tsqlParser.NEXT - 291)) | (1 << (tsqlParser.NOCOUNT - 291)) | (1 << (tsqlParser.NOEXPAND - 291)) | (1 << (tsqlParser.NORECOMPUTE - 291)) | (1 << (tsqlParser.NTILE - 291)) | (1 << (tsqlParser.NUMBER - 291)) | (1 << (tsqlParser.OFFSET - 291)) | (1 << (tsqlParser.ONLINE - 291)) | (1 << (tsqlParser.ONLY - 291)) | (1 << (tsqlParser.OPTIMISTIC - 291)) | (1 << (tsqlParser.OPTIMIZE - 291)) | (1 << (tsqlParser.OUT - 291)))) !== 0) || ((((_la - 323)) & ~0x1f) == 0 && ((1 << (_la - 323)) & ((1 << (tsqlParser.OUTPUT - 323)) | (1 << (tsqlParser.OWNER - 323)) | (1 << (tsqlParser.PARAMETERIZATION - 323)) | (1 << (tsqlParser.PARTITION - 323)) | (1 << (tsqlParser.PATH - 323)) | (1 << (tsqlParser.PRECEDING - 323)) | (1 << (tsqlParser.PRIOR - 323)) | (1 << (tsqlParser.PRIVILEGES - 323)) | (1 << (tsqlParser.RANGE - 323)) | (1 << (tsqlParser.RANK - 323)) | (1 << (tsqlParser.READONLY - 323)) | (1 << (tsqlParser.READ_ONLY - 323)) | (1 << (tsqlParser.RECOMPILE - 323)) | (1 << (tsqlParser.RELATIVE - 323)) | (1 << (tsqlParser.REMOTE - 323)) | (1 << (tsqlParser.REPEATABLE - 323)) | (1 << (tsqlParser.ROBUST - 323)) | (1 << (tsqlParser.ROOT - 323)) | (1 << (tsqlParser.ROW - 323)) | (1 << (tsqlParser.ROWGUID - 323)) | (1 << (tsqlParser.ROWS - 323)) | (1 << (tsqlParser.ROW_NUMBER - 323)) | (1 << (tsqlParser.SAMPLE - 323)) | (1 << (tsqlParser.SCHEMABINDING - 323)) | (1 << (tsqlParser.SCROLL - 323)))) !== 0) || ((((_la - 355)) & ~0x1f) == 0 && ((1 << (_la - 355)) & ((1 << (tsqlParser.SCROLL_LOCKS - 355)) | (1 << (tsqlParser.SELF - 355)) | (1 << (tsqlParser.SERIALIZABLE - 355)) | (1 << (tsqlParser.SIMPLE - 355)) | (1 << (tsqlParser.SIZE - 355)) | (1 << (tsqlParser.SNAPSHOT - 355)) | (1 << (tsqlParser.SPATIAL_WINDOW_MAX_CELLS - 355)) | (1 << (tsqlParser.STATIC - 355)) | (1 << (tsqlParser.STATS_STREAM - 355)) | (1 << (tsqlParser.STDEV - 355)) | (1 << (tsqlParser.STDEVP - 355)) | (1 << (tsqlParser.SUM - 355)) | (1 << (tsqlParser.TEXTIMAGE_ON - 355)) | (1 << (tsqlParser.THROW - 355)) | (1 << (tsqlParser.TIES - 355)) | (1 << (tsqlParser.TIME - 355)) | (1 << (tsqlParser.TRY - 355)) | (1 << (tsqlParser.TYPE - 355)) | (1 << (tsqlParser.TYPE_WARNING - 355)) | (1 << (tsqlParser.UNBOUNDED - 355)) | (1 << (tsqlParser.UNCOMMITTED - 355)) | (1 << (tsqlParser.UNKNOWN - 355)))) !== 0) || ((((_la - 388)) & ~0x1f) == 0 && ((1 << (_la - 388)) & ((1 << (tsqlParser.USING - 388)) | (1 << (tsqlParser.VAR - 388)) | (1 << (tsqlParser.VARP - 388)) | (1 << (tsqlParser.VIEWS - 388)) | (1 << (tsqlParser.VIEW_METADATA - 388)) | (1 << (tsqlParser.WORK - 388)) | (1 << (tsqlParser.XML - 388)) | (1 << (tsqlParser.XMLNAMESPACES - 388)) | (1 << (tsqlParser.ID - 388)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Comparison_operatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_comparison_operator;
    return this;
}

Comparison_operatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Comparison_operatorContext.prototype.constructor = Comparison_operatorContext;


Comparison_operatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterComparison_operator(this);
	}
};

Comparison_operatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitComparison_operator(this);
	}
};




tsqlParser.Comparison_operatorContext = Comparison_operatorContext;

tsqlParser.prototype.comparison_operator = function() {

    var localctx = new Comparison_operatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 328, tsqlParser.RULE_comparison_operator);
    try {
        this.state = 3115;
        this._errHandler.sync(this);
        var la_ = this._interp.adaptivePredict(this._input,458,this._ctx);
        switch(la_) {
        case 1:
            this.enterOuterAlt(localctx, 1);
            this.state = 3100;
            this.match(tsqlParser.EQUAL);
            break;

        case 2:
            this.enterOuterAlt(localctx, 2);
            this.state = 3101;
            this.match(tsqlParser.GREATER);
            break;

        case 3:
            this.enterOuterAlt(localctx, 3);
            this.state = 3102;
            this.match(tsqlParser.LESS);
            break;

        case 4:
            this.enterOuterAlt(localctx, 4);
            this.state = 3103;
            this.match(tsqlParser.LESS);
            this.state = 3104;
            this.match(tsqlParser.EQUAL);
            break;

        case 5:
            this.enterOuterAlt(localctx, 5);
            this.state = 3105;
            this.match(tsqlParser.GREATER);
            this.state = 3106;
            this.match(tsqlParser.EQUAL);
            break;

        case 6:
            this.enterOuterAlt(localctx, 6);
            this.state = 3107;
            this.match(tsqlParser.LESS);
            this.state = 3108;
            this.match(tsqlParser.GREATER);
            break;

        case 7:
            this.enterOuterAlt(localctx, 7);
            this.state = 3109;
            this.match(tsqlParser.EXCLAMATION);
            this.state = 3110;
            this.match(tsqlParser.EQUAL);
            break;

        case 8:
            this.enterOuterAlt(localctx, 8);
            this.state = 3111;
            this.match(tsqlParser.EXCLAMATION);
            this.state = 3112;
            this.match(tsqlParser.GREATER);
            break;

        case 9:
            this.enterOuterAlt(localctx, 9);
            this.state = 3113;
            this.match(tsqlParser.EXCLAMATION);
            this.state = 3114;
            this.match(tsqlParser.LESS);
            break;

        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function Assignment_operatorContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_assignment_operator;
    return this;
}

Assignment_operatorContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
Assignment_operatorContext.prototype.constructor = Assignment_operatorContext;


Assignment_operatorContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterAssignment_operator(this);
	}
};

Assignment_operatorContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitAssignment_operator(this);
	}
};




tsqlParser.Assignment_operatorContext = Assignment_operatorContext;

tsqlParser.prototype.assignment_operator = function() {

    var localctx = new Assignment_operatorContext(this, this._ctx, this.state);
    this.enterRule(localctx, 330, tsqlParser.RULE_assignment_operator);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3117;
        _la = this._input.LA(1);
        if(!(((((_la - 413)) & ~0x1f) == 0 && ((1 << (_la - 413)) & ((1 << (tsqlParser.PLUS_ASSIGN - 413)) | (1 << (tsqlParser.MINUS_ASSIGN - 413)) | (1 << (tsqlParser.MULT_ASSIGN - 413)) | (1 << (tsqlParser.DIV_ASSIGN - 413)) | (1 << (tsqlParser.MOD_ASSIGN - 413)) | (1 << (tsqlParser.AND_ASSIGN - 413)) | (1 << (tsqlParser.XOR_ASSIGN - 413)) | (1 << (tsqlParser.OR_ASSIGN - 413)))) !== 0))) {
        this._errHandler.recoverInline(this);
        }
        else {
        	this._errHandler.reportMatch(this);
            this.consume();
        }
    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};

function File_sizeContext(parser, parent, invokingState) {
	if(parent===undefined) {
	    parent = null;
	}
	if(invokingState===undefined || invokingState===null) {
		invokingState = -1;
	}
	antlr4.ParserRuleContext.call(this, parent, invokingState);
    this.parser = parser;
    this.ruleIndex = tsqlParser.RULE_file_size;
    return this;
}

File_sizeContext.prototype = Object.create(antlr4.ParserRuleContext.prototype);
File_sizeContext.prototype.constructor = File_sizeContext;

File_sizeContext.prototype.DECIMAL = function() {
    return this.getToken(tsqlParser.DECIMAL, 0);
};

File_sizeContext.prototype.KB = function() {
    return this.getToken(tsqlParser.KB, 0);
};

File_sizeContext.prototype.MB = function() {
    return this.getToken(tsqlParser.MB, 0);
};

File_sizeContext.prototype.GB = function() {
    return this.getToken(tsqlParser.GB, 0);
};

File_sizeContext.prototype.TB = function() {
    return this.getToken(tsqlParser.TB, 0);
};

File_sizeContext.prototype.enterRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.enterFile_size(this);
	}
};

File_sizeContext.prototype.exitRule = function(listener) {
    if(listener instanceof tsqlListener ) {
        listener.exitFile_size(this);
	}
};




tsqlParser.File_sizeContext = File_sizeContext;

tsqlParser.prototype.file_size = function() {

    var localctx = new File_sizeContext(this, this._ctx, this.state);
    this.enterRule(localctx, 332, tsqlParser.RULE_file_size);
    var _la = 0; // Token type
    try {
        this.enterOuterAlt(localctx, 1);
        this.state = 3119;
        this.match(tsqlParser.DECIMAL);
        this.state = 3121;
        this._errHandler.sync(this);
        _la = this._input.LA(1);
        if(((((_la - 265)) & ~0x1f) == 0 && ((1 << (_la - 265)) & ((1 << (tsqlParser.GB - 265)) | (1 << (tsqlParser.KB - 265)) | (1 << (tsqlParser.MB - 265)))) !== 0) || _la===tsqlParser.TB || _la===tsqlParser.MODULE) {
            this.state = 3120;
            _la = this._input.LA(1);
            if(!(((((_la - 265)) & ~0x1f) == 0 && ((1 << (_la - 265)) & ((1 << (tsqlParser.GB - 265)) | (1 << (tsqlParser.KB - 265)) | (1 << (tsqlParser.MB - 265)))) !== 0) || _la===tsqlParser.TB || _la===tsqlParser.MODULE)) {
            this._errHandler.recoverInline(this);
            }
            else {
            	this._errHandler.reportMatch(this);
                this.consume();
            }
        }

    } catch (re) {
    	if(re instanceof antlr4.error.RecognitionException) {
	        localctx.exception = re;
	        this._errHandler.reportError(this, re);
	        this._errHandler.recover(this, re);
	    } else {
	    	throw re;
	    }
    } finally {
        this.exitRule();
    }
    return localctx;
};


tsqlParser.prototype.sempred = function(localctx, ruleIndex, predIndex) {
	switch(ruleIndex) {
	case 85:
			return this.expression_sempred(localctx, predIndex);
	case 92:
			return this.search_condition_sempred(localctx, predIndex);
    default:
        throw "No predicate with index:" + ruleIndex;
   }
};

tsqlParser.prototype.expression_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 0:
			return this.precpred(this._ctx, 5);
		case 1:
			return this.precpred(this._ctx, 3);
		case 2:
			return this.precpred(this._ctx, 2);
		case 3:
			return this.precpred(this._ctx, 12);
		default:
			throw "No predicate with index:" + predIndex;
	}
};

tsqlParser.prototype.search_condition_sempred = function(localctx, predIndex) {
	switch(predIndex) {
		case 4:
			return this.precpred(this._ctx, 3);
		case 5:
			return this.precpred(this._ctx, 2);
		default:
			throw "No predicate with index:" + predIndex;
	}
};


exports.tsqlParser = tsqlParser;
